2017-12-05 5 views
0

のBase64でMD5ハッシュを生成します。私はC#のウェブAPIで実装されたセキュリティコード化を以下しているバイト配列

string testStr = "test"; 
ASCIIEncoding encoding = new ASCIIEncoding(); //using System.Text; 
byte[] byteData = encoding.GetBytes(testStr); 

MD5 md5 = MD5.Create(); //using System.Security.Cryptography; 
string hash = md5.ComputeHash(byteData); 
string md5Base64 = Convert.ToBase64String(hash); 

私はヘッダにこのmd5Base64文字列を結合して、APIリクエストでそれを比較します。これは、私がC#コードからAPIをヒットしたときにうまく動作します。今私はjavascriptでそれを使用する必要があるので、上記のコードに相当するjsが必要です。

私は、次の試してみましたが、それは別の出力を与えている:ここで使用

var testStr = 'test'; 
var byteData = testStr.split ('').map(function (c) { return c.charCodeAt (0); }); 
var hash = MD5(value.join(',')); 
var md5Base64 = btoa(hash); 

MD5機能はhttps://stackoverflow.com/a/33486055/7519287

からである私は、ここで間違っているものを教えてください。

+0

暗号化については、1k repユーザには依存しません。 CryptoJSはよく知られており、同じことをする積極的に維持されたレポです –

答えて

0

JavaScriptコードの問題は、不要なコンバージョンを実行していることです。MD5は既に文字列を受け取ります。さらに、ハッシング後の変換が多く必要になります。

我々は、次のC#のコードがある場合:

string tmp = "test"; 
byte[] bTmp = System.Text.Encoding.UTF8.GetBytes(tmp); 
byte[] hashed = null; 
using (System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider()) 
{ 
    hashed = md5.ComputeHash(bTmp); 
} 

Console.WriteLine(Convert.ToBase64String(hashed)); 

Fiddle

をその後、同等のJavaScriptコードは次のとおりです。

var tmp = 'test'; 
var hashed = hex2a(MD5(tmp)); // md5 src: https://stackoverflow.com/a/33486055/7519287 

// src: https://stackoverflow.com/a/3745677/3181933 
function hex2a(hexx) { 
    var hex = hexx.toString();//force conversion 
    var str = ''; 
    for (var i = 0; i < hex.length; i += 2) 
     str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); 
    return str; 
} 

alert(btoa(hashed)); 

Fiddle

MD5は16進文字列を返すので、あなたはASCIIに変換する必要があります前にすることができますse64でエンコードします。あなたはbase64エンコーディングが必要なのだろうか? MD5は、通常、16進文字列として表されます。おそらくC#側でConvert.ToBase64String(hashed)の代わりにBitConverter.ToString(hashed).Replace("-", "")を使用してMD5ハッシュの16進文字列を取得できますか? JavaScriptでMD5(tmp)を使用するだけです。

+0

Base64エンコーディングは、すでにいくつかの場所で使用されているので変更できません。 – ctor

関連する問題