用perl识别加密Word文档
我有一系列Word文档,需要密码才能解码,并且希望能够在一系列未加密的Word文档中识别它们是否具有密码 我遵循了stackoverflow链接提供的大部分指导: 以下是我当前使用的代码:用perl识别加密Word文档,perl,encryption,ms-word,Perl,Encryption,Ms Word,我有一系列Word文档,需要密码才能解码,并且希望能够在一系列未加密的Word文档中识别它们是否具有密码 我遵循了stackoverflow链接提供的大部分指导: 以下是我当前使用的代码: sub _is_encrypted_doc { my ($data) = @_; if (_is_office_doc($data)) { if ($data =~ /(?:<encryption xmlns)/i) { return 1; }
sub _is_encrypted_doc {
my ($data) = @_;
if (_is_office_doc($data)) {
if ($data =~ /(?:<encryption xmlns)/i) {
return 1;
}
if (index($data, "\x13") == 523) {
return 1;
}
if (index($data, "\x2f") == 532) {
return 1;
}
if (index($data, "\xfe") == 520) {
return 1;
}
my $tdata = substr $data, 2000;
$tdata =~ s/\\0/ /g;
if (index($tdata, "E n c r y p t e d P a c k a g e") > -1) {
return 1;
}
}
}
sub\u是加密的\u文档{
我的($数据)=@;
如果(_是_办公室_文件($data)){
如果($data=~/(?:-1){
返回1;
}
}
}
但是,我的代码似乎没有识别我们收到的所有变体。我在这里上传了一个这样的文件:
使用“NZlttUtz”解码。我在这方面比较新,所以我希望有人能在这里指导我。已经有更全面的代码可以做这件事了吗?据我在您参考的链接中看到的,通常以ÐÏ前缀开头的文件是受保护的,我没有找到任何以该前缀开头的未受保护的word文档。因此,除非您需要区分Excel和Word以及文档的版本(通过文件ext可以更好地处理),您可以简单地测试以Ð开头的文件
use Fcntl qw(:seek);
my($fh, $FILE, $byte_position, $byte_value);
$FILE = "path/to/file";
$byte_position = 0;
open($fh, "<", $FILE)
|| die "can't open $FILE: $!";
binmode($fh)
|| die "can't binmode $FILE";
sysseek($fh, $byte_position, SEEK_CUR) # NB: 0-based
|| die "couldn't see to byte $byte_position in $FILE: $!";
sysread($fh, $byte_value, 1) == 1
|| die "couldn't read byte from $FILE: $!";
if (ord($byte_value) == 208){
return 1;
}
else {
return 0;
}
使用Fcntl qw(:seek);
我的($fh,$FILE,$byte\u位置,$byte\u值);
$FILE=“path/to/FILE”;
$byte_位置=0;
开放式($fh),"\u is _office _doc
是什么?因为你的文件包含你能告诉我你用什么方法读取文件来确定它包含xxd g9kfak164.docx | less
那么问题又来了。\u is _office _doc
方法做了什么?我已经上传了完整的代码,我相信这个问题e带有用于检测这些文件的标记,对于这些强加密word文档来说不再准确。非常感谢您的帮助。我想您的意思是如果($data eq 208){
?它打印的参数“”在数值eq(=)中不是数字
。它也从不等于208,总是只返回0。其他想法?这对我来说仍然不起作用:-(它总是在循环中为文件中的每个字符返回0。打印$data显示它确实是“”(零),但它从不匹配…好的。那么让我们尝试另一种方法。(答案编辑)