当前位置:  开发笔记 > 编程语言 > 正文

在Perl中等效的SHA1 C#方法?

如何解决《在Perl中等效的SHA1C#方法?》经验,为你挑选了1个好方法。

我得到了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)添加到传递的末尾,因此我已添加该代码以防出现问题.



1> Sinan Ünür..:

我也不知道C#.但是,{0:X}使用大写字母格式化十六进制数字.那么,会的

my $passSha1 = uc sha1_hex($pass);

救命?(假设GetHashedPassword有道理.)

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有