我得到了C#代码,我正在尝试使用Perl生成等效的SHA1.
public string GetHashedPassword(string passkey) { // Add a timestamp to the passkey and encrypt it using SHA1. string passkey = passkey + DateTime.UtcNow.ToString("yyyyMMddHH0000"); using (SHA1 sha1 = new SHA1CryptoServiceProvider()) { byte[] hashedPasskey = sha1.ComputeHash(Encoding.UTF8.GetBytes(passkey)); return ConvertToHex(hashedPasskey); } } private string ConvertToHex(byte[] bytes) { StringBuilder hex = new StringBuilder(); foreach (byte b in bytes) { if (b < 16) { hex.AppendFormat("0{0:X}", b); } else { hex.AppendFormat("{0:X}", b); } } return hex.ToString(); }
同样如下:
use Digest::SHA1 qw( sha1_hex ); my $pass = "blahblah"; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(); $year += 1900; my $date = sprintf("%d%02d%02d%02d0000", $year, $mon+1, $mday, $hour); my $passSha1 = sha1_hex($pass.$date); //9c55409372610f8fb3695d1c7c2e6945164a2578
我实际上没有任何C#经验,所以我无法测试通常从C#代码输出的内容.
该代码应该用作网站的校验和,但我提供的代码是失败的.
编辑:它还会在散列之前将UTC时间戳(yyyyMMDDHH0000)添加到传递的末尾,因此我已添加该代码以防出现问题.
我也不知道C#.但是,{0:X}
使用大写字母格式化十六进制数字.那么,会的
my $passSha1 = uc sha1_hex($pass);
救命?(假设GetHashedPassword
有道理.)