簡體   English   中英

Javascript解密C#AES加密

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM