我正在嘗試使用 C# 加密字符串并使用 Angular crypto-js 庫對其進(jìn)行解密,但它給了我不同的輸出。我嘗試了不同的 c# aes 加密實(shí)現(xiàn),但 crypto-js 庫無法解密 c# 中的加密數(shù)據(jù)。感謝您的任何幫助。這是我的代碼程序.cs static void Main() { var r = EncryptString("exampleString", "examplePassword"); Console.Write(r); } public static string EncryptString(string plainText, string passPhrase) { if (string.IsNullOrEmpty(plainText)) { return ""; } // generate salt byte[] key, iv; var salt = new byte[8]; var rng = new RNGCryptoServiceProvider(); rng.GetNonZeroBytes(salt); DeriveKeyAndIv(passPhrase, salt, out key, out iv); // encrypt bytes var encryptedBytes = EncryptStringToBytesAes(plainText, key, iv); // add salt as first 8 bytes var encryptedBytesWithSalt = new byte[salt.Length + encryptedBytes.Length + 8]; Buffer.BlockCopy(Encoding.ASCII.GetBytes("Salted__"), 0, encryptedBytesWithSalt, 0, 8); Buffer.BlockCopy(salt, 0, encryptedBytesWithSalt, 8, salt.Length); Buffer.BlockCopy(encryptedBytes, 0, encryptedBytesWithSalt, salt.Length + 8, encryptedBytes.Length); // base64 encode return Convert.ToBase64String(encryptedBytesWithSalt); } private static void DeriveKeyAndIv(string passPhrase, byte[] salt, out byte[] key, out byte[] iv) { // generate key and iv var concatenatedHashes = new List<byte>(48); var password = Encoding.UTF8.GetBytes(passPhrase); var currentHash = new byte[0]; var md5 = MD5.Create(); bool enoughBytesForKey = false; // See http://www.openssl.org/docs/crypto/EVP_BytesToKey.html#KEY_DERIVATION_ALGORITHM while (!enoughBytesForKey)
AES 加密與 C# 解密與 crypto-js
蕪湖不蕪
2022-12-02 11:21:48