[英]Javascript Decrypt C# AES Encryption
我正在嘗試使用javascript解密C#加密字符串,
這是服務器端加密的一個示例
public class AesCrypt
{
public static string IV = @"!QAZ2WSX#EDC4RFV";
public static string Key = @"5TGB&YHN7UJM(IK<5TGB&YHN7UJM(IK<";
public static string Encrypt(string dectypted)
{
byte[] textbytes = ASCIIEncoding.ASCII.GetBytes(dectypted);
AesCryptoServiceProvider encdec = new AesCryptoServiceProvider();
encdec.BlockSize = 128;
encdec.KeySize = 256;
encdec.Key = ASCIIEncoding.ASCII.GetBytes(Key);
encdec.IV = ASCIIEncoding.ASCII.GetBytes(IV);
encdec.Padding = PaddingMode.PKCS7;
encdec.Mode = CipherMode.CBC;
ICryptoTransform icrypt = encdec.CreateEncryptor(encdec.Key, encdec.IV);
byte[] enc = icrypt.TransformFinalBlock(textbytes, 0, textbytes.Length);
icrypt.Dispose();
return Convert.ToBase64String(enc);
}
}
"Hello World"
的加密為"1i4zI5rB3Df2CYFalsiTwg=="
現在,我嘗試在客戶端上使用js對其進行解密,並獲取Hello World
,這是我失敗的地方,
我正在使用<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
進行解密,我觀看了一些網絡上的示例集(包括stackoverflow)。
根據網絡上的一些示例,這是我想到的,但是它並沒有返回“ Hello World”。
data = "1i4zI5rB3Df2CYFalsiTwg==";
key = "5TGB&YHN7UJM(IK<5TGB&YHN7UJM(IK<";
iv = "!QAZ2WSX#EDC4RFV";
CryptoJS.AES.decrypt(atob(data), key, {
iv: atob(iv),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
我正在使用相同的模式和填充,但是可能缺少一些東西。 我對CryptoJS不太熟悉,希望有人可以幫助我了解我哪里出了問題。
提前致謝
在舊的CryptoJS頁面上 ,密碼輸入部分:
對於密鑰, 當您傳遞字符串時,將其視為密碼短語並用於派生實際密鑰和IV。 或者,您可以傳遞代表實際鍵的WordArray。 如果通過實際密鑰,則還必須通過實際IV。
盡管您正在傳遞IV,但是您目前確實將字符串而不是二進制鍵作為單詞數組。 我認為這是問題所在,因為我沒有看到其他明顯的編程錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.