C#とmysqlで同じsha512を作る

私はC#とmysqlで同じsha512を作りたいと思っています。

C#

System.Security.Cryptography.SHA512.Create().ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes("test"));

C# results Length 64

238 38 176 221 74 247 231 73 170 26 142 227 193 10 233 146 63 97 137 128 119 46 71 63 136 25 165 212 148 14 13 178 122 193 133 248 160 225 213 248 79 136 188 136 127 214 123 20 55 50 195 4 204 95 169 173 142 111 87 245 0 40 168 255 

mysql

INSERT INTO users_table (password) VALUES (  SHA2("test", 512));
// password is a BINARY(128)

mysql結果の長さ128

101 101 50 54 98 48 100 100 52 97 102 55 101 55 52 57 97 97 49 97 56 101 101 51 99 49 48 97 101 57 57 50 51 102 54 49 56 57 56 48 55 55 50 101 52 55 51 102 56 56 49 57 97 53 100 52 57 52 48 101 48 100 98 50 55 97 99 49 56 53 102 56 97 48 101 49 100 53 102 56 52 102 56 56 98 99 56 56 55 102 100 54 55 98 49 52 51 55 51 50 99 51 48 52 99 99 53 102 97 57 97 100 56 101 54 102 53 55 102 53 48 48 50 56 97 56 102 102 

私はバイトからそれらを比較し、 結果はお互いに異なる:(

助けてくれてありがとう!

最高のジョハンについて

2
いずれかのプラットフォームで文字列ターミネータとして末尾の 0x00 ASCII NUL文字が含まれるかどうか知っていますか?
追加された 著者 sarnold,
まず心に浮かぶのはエンコーディングの不一致です。 MySQLはASCIIを使用していない可能性が高いですが、おそらく "test"のASCIIと同じものを使用しています。 MySQL接続の文字セットとは何ですか?また、2つのハッシュを投稿できますか?
追加された 著者 Corbin,
私は今、それに取り組んで、私は今エラーの傾向を見る:D
追加された 著者 Johan Polson,
手がかりがないsarnoldしかし、私はそれが現時点で問題だとは思わない。しかし、ありがとう!
追加された 著者 Johan Polson,

1 答え

MySqlは16進数でエンコードされた文字列を返します。

MySQL 5.5.6以降では、戻り値は   接続文字セット。 5.5.6以前では、戻り値はバイナリです   文字列;このセクションの冒頭の注記を参照してください。   値を非バイナリ文字列として返します。

You can tell this is happening because C#'s first byte is 238, which is 0xee, and the ASCII code for e is 101 -- MySql's return begins with 101 101. So you just need to turn the hex-encoded string into a binary string again with UNHEX (but only on MySql > 5.5.6).

あなたのケースで同じ結果を得るには:

INSERT INTO users_table (password) VALUES (UNHEX(SHA2("test", 512))); 

そして、 MySql条件付きコメント(ああ醜さ!)を使ってバージョン間で移植可能:

INSERT INTO users_table (password) VALUES (/*!50506 UNHEX(*/SHA2("test",512)/*!50506 )*/); 
2
追加された
どうもありがとう ! ! !
追加された 著者 Johan Polson,