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# コードから通常出力されるものをテストすることはできません。

コードは Web サイトのチェックサムとして使用されるはずですが、私が提供しているものは失敗しています。

編集: また、ハッシュする前に UTC タイムスタンプ (yyyyMMDDHH0000) をパスの末尾に追加するため、問題が発生した場合に備えてそのコードを追加しました。

4

5 に答える 5

5

C#もわかりません。ただし、{0:X}大文字を使用して 16 進数をフォーマットします。だから、だろう

my $passSha1 = uc sha1_hex($pass);

ヘルプ?(仮定GetHashedPasswordは理にかなっています。)

于 2009-08-05T04:49:56.413 に答える
4

(Visual Studio 2008 でコードを実行してから) わかる唯一の違いは、C# コードが大文字のアルファを含む 16 進文字列を返していることです。

D3395867D05CC4C27F013D6E6F48D644E96D8241

そしてperlコードはアルファに小文字を使用しています

d3395867d05cc4c27f013d6e6f48d644e96d8241

C# コードで使用される書式文字列は、大文字 (「x」ではなく「X」) を求めています。

hex.AppendFormat("{0:X}", b);

ウェブサイトのコードは、大文字と小文字を区別する比較を使用している可能性がありますか? CPAN関数からの出力を送信する前に大文字に変換するのは簡単だと思いますか?

于 2009-08-05T04:50:35.930 に答える
2

呼び出しで大文字の ' X' を小文字の ' ' に変更するのと同じくらい簡単でしょうか?AppendFormatx

于 2009-08-05T04:51:44.290 に答える
0

探していると思いますDigest::SHA1

于 2009-08-05T04:30:13.630 に答える
0

あなたの SHA-1 は、次のようになっている可能性もあります。

BitConverter.ToString(SHA.ComputeHash(buffer)).Replace("-", "");
于 2012-01-29T18:10:13.873 に答える