我有一个名为的文件secure.txt in c:\ temp。我想从命令行运行Perl命令来打印secure.txt的SHA1散列。我使用ActivePerl 5.8.2。我以前没有用过Perl,但这是目前最方便的选择。如何使用Perl从Windows命令行获取文件的SHA1哈希值?
回答
perl -MDigest::SHA1=sha1_hex -le "print sha1_hex <>" secure.txt
Perl的命令行选项记录在perlrun中。从上面的命令从左到右:
-M Digest::SHA1=sha1_hex
加载在编译时和进口sha1_hex
的Digest::SHA1模块,这给摘要以十六进制形式。-l
自动添加一个换行符的任何print
-e
年底推出被执行
的Perl代码看起来很有趣的钻石是Perl的readline
运营商的一个特殊情况:
空文件句柄
<>
是特殊的:它可以用来模拟sed
和awk
的行为。来自<>
的输入来自标准输入或来自命令行上列出的每个文件。以下是它的工作原理:第一次对<>
进行评估时,将检查@ARGV
阵列,如果它是空的,则将$ARGV[0]
设置为"-"
,打开时会为您提供标准输入。然后将@ARGV
数组作为文件名列表进行处理。
因为secure.txt
被命名为命令行中的唯一文件,其内容将成为参数sha1_hex
。
使用Perl版本5.10或更高版本,您可以缩短上面的单行五个字符。
perl -MDigest::SHA=sha1_hex -E 'say sha1_hex<>' secure.txt
代码丢弃可选的(用Perl的所有版本)空白<>
之前,滴剂-l
,并从-e
到-E
开关。
如果你想有一个方便实用的代码,说mysha1sum.pl
,然后用
#! /usr/bin/perl
use warnings;
use strict;
use Digest::SHA1;
die "Usage: $0 file ..\n" unless @ARGV;
foreach my $file (@ARGV) {
my $fh;
unless (open $fh, $file) {
warn "$0: open $file: $!";
next;
}
my $sha1 = Digest::SHA1->new;
$sha1->addfile($fh);
print $sha1->hexdigest, " $file\n";
close $fh;
}
这将计算摘要名为在命令行上的每个文件,输出格式与Unix sha1sum
实用程序兼容。
C:\> mysha1sum.pl mysha1sum.pl mysha1sum.pl
8f3a7288f1697b172820ef6be0a296560bc13bae mysha1sum.pl
8f3a7288f1697b172820ef6be0a296560bc13bae mysha1sum.pl
你没有说你是否已经安装了Cygwin,但如果这样做,sha1sum
是coreutils软件包的一部分。
使用Digest::SHA1
像这样:
#!/usr/bin/perl -w
use strict;
use Digest::SHA1 qw/ sha1_hex /;
# open file
open IN_DATA, "<secure.txt" or die "cannot open file secure.txt for reading: $!";
# read in all file contents
my $file_contents;
{local $/; $file_contents = <IN_DATA>;}
# close file
close IN_DATA;
print &sha1_hex($file_contents);
编辑:为什么向下票呢?这段代码不起作用吗?这不是解决问题的恰当方法吗?
请使用本地词法文件句柄 - '打开我的$ in_data,'<','secure.txt'或死...' – Ether 2010-05-11 16:10:00
@其他 - 这是个人喜好的问题。 – amphetamachine 2010-05-11 21:13:18
有很好的理由使用词法句柄。请参阅http://stackoverflow.com/questions/1479741/why-is-three-argument-open-calls-with-lexical-filehandles-a-perl-best-practice – daotoad 2010-05-11 23:53:56
尝试Digest::SHA模块。
C:\> perl -MDigest::SHA -e "print Digest::SHA->new(1)->addfile('secure.txt')->hexdigest"
- 1. 从QString获取Sha1哈希
- 2. perl:使用地图获取哈希值
- 3. 获取C#文件的SHA1二进制base64哈希值
- 4. Sha1哈希多个sha1哈希 - >安全以识别文件?
- 5. 如何从Windows命令行生成Bcrypt哈希
- 6. Git命令列出所有树对象的SHA1哈希值
- 7. 如何将Bit Torrent info_hash(从Wireshark获取)转换为SHA1哈希
- 8. 如何从使用PHP的torrent文件获取哈希信息?
- 9. 如何正确选择SHA1哈希值?
- 10. 如何从网站获取哈希值?
- 11. 如何找到SHA1哈希?
- 12. SQLite SHA1哈希:如何?
- 13. 如何从Windows命令行获取cURL?
- 14. 获取一个Perl哈希
- 15. 从哈希中获取值
- 16. MYSQL从SHA1生成登录哈希值
- 17. 在javascript中使用sha1哈希文本
- 18. 使用其文件名的sha1()哈希来重命名文件的脚本
- 19. 为文件的块生成SHA1哈希
- 20. 如何使用AutoHotkey将文件的SHA1哈希值转换为字符串var?
- 21. 如何在文件上执行SHA1哈希?
- 22. 如何用python的sha1哈希重命名目录中的文件?
- 23. perl的 - 从哈希
- 24. 获取所有值从多值每个键哈希在Perl
- 25. 如何从用户处获取Perl中的命令行文件输入?
- 26. 从URL获取MD5哈希文件
- 27. Perl的:获取哈希阵列并行价值
- 28. Perl哈希哈希
- 29. SHA1哈希澄清
- 30. GPU MD5/SHA1哈希
+1对于Perl高尔夫洞穴合一 – amphetamachine 2010-05-11 15:58:58
如此多的信息......如果我可以的话我会+2! – MiffTheFox 2010-05-11 16:28:13
非常清楚。正是我需要的。谢谢! – Jim 2010-05-11 16:35:38