2016-09-15 9 views
0

私はCryptoJSで同じ結果を得ていません。何が間違っているか確認してください。ここでJS(CryptoJS)のC#での暗号化の暗号化

は私の予想される入力/出力である:ここで

Encrypted String: 723024D59CF7801A295F81B9D5BB616E 
Decrypted String: stackoverflow 

は、C#での私の復号/暗号化方式です。暗号化はTripleDESモードですCBC、私はCryptoJSコードで同じキーとivを使用しています。ここで

public static string Encrypt(string data, string key, string iv) 
{ 
    byte[] bdata = Encoding.ASCII.GetBytes(data); 
    byte[] bkey = HexToBytes(key); 
    byte[] biv = HexToBytes(iv); 

    var stream = new MemoryStream(); 
    var encStream = new CryptoStream(stream, 
     des3.CreateEncryptor(bkey, biv), CryptoStreamMode.Write); 

    encStream.Write(bdata, 0, bdata.Length); 
    encStream.FlushFinalBlock(); 
    encStream.Close(); 

    return BytesToHex(stream.ToArray()); 
} 

public static string Decrypt(string data, string key, string iv) 
{ 
    byte[] bdata = HexToBytes(data); 
    byte[] bkey = HexToBytes(key); 
    byte[] biv = HexToBytes(iv); 

    var stream = new MemoryStream(); 
    var encStream = new CryptoStream(stream, 
     des3.CreateDecryptor(bkey, biv), CryptoStreamMode.Write); 

    encStream.Write(bdata, 0, bdata.Length); 
    encStream.FlushFinalBlock(); 
    encStream.Close(); 

    return Encoding.ASCII.GetString(stream.ToArray()); 
} 

は私がCryptoJS

var key = "90033E3984CEF5A659C44BBB47299B4208374FB5DC495C96"; 
var iv = "E6B9AFA7A282A0CA"; 

key = CryptoJS.enc.Hex.parse(key); 
iv = CryptoJS.enc.Hex.parse(iv); 


// Input is a Hex String 
var decrypted = CryptoJS.TripleDES.decrypt('723024D59CF7801A295F81B9D5BB616E', key, { iv : iv, mode:CryptoJS.mode.CBC}); 
console.log(decrypted.toString()); 
+0

こんにちは、あなたは私にHexToBytes機能を与えることができます:あなたは、あなたがテキストを取得する必要があることがわかっている場合は、次のような適切なエンコーディングを使用することができます。またdes3オブジェクトは何ですか?これらの機能をスタンドアロン形式で利用できますか?私は同じことをしなければならないが、私は暗号化部分のために新しい。 – Sagar

答えて

0

CryptoJSを使用して復号化を行う方法暗号文がCipherParamsオブジェクトまたはOpenSSLのエンコードされた文字列であることを期待しています。あなたは16進数として暗号文を渡しました。代わりに、次の操作を行います。

var decrypted = CryptoJS.TripleDES.decrypt({ 
    ciphertext: CryptoJS.enc.Hex.parse('723024D59CF7801A295F81B9D5BB616E') 
}, key, { 
    iv : iv, 
    mode:CryptoJS.mode.CBC 
}); 

decryptedは今WordArrayオブジェクトです。それを文字列化すると、デフォルトのエンコーディングである16進数の文字列になります。

console.log(decrypted.toString(CryptoJS.enc.Utf8));