我必須加密一些私人領域,我發現(jbtule's)類using AESGCM。AESGCM解密失敗與MAC
當我剛剛加密和解密正常工作:
string nonSecretPayload = "[email protected]!$#@#%a";
string encryptThisStr = "CakeCat";
string key = "12345678912365478912365478965412";
var encryptAESGCM = AESGCM.SimpleEncrypt(Encoding.UTF8.GetBytes(encryptThisStr), Encoding.UTF8.GetBytes(key), Encoding.UTF8.GetBytes(nonSecretPayload));
//addedJson += "c" + count + "{\"" + @Encoding.UTF8.GetString(encryptAESGCM) + "\"}";
var decrypyAESGCM2 = AESGCM.SimpleDecrypt(encryptAESGCM , Encoding.UTF8.GetBytes(key), Encoding.UTF8.GetBytes(salt).Length);
但是,當我在encryptAESGCM
的byte []保存爲一個JSON文件中的字符串,然後解密字符串我就可以做一個Encoding.UTF8.GetBytes()
後,失敗:
Org.BouncyCastle.Crypto.InvalidCipherTextException: mac check in GCM failed
at Org.BouncyCastle.Crypto.Modes.GcmBlockCipher.DoFinal(Byte[] output, Int32
outOff) in C:\BouncyCastle\crypto\src\crypto\modes\GCMBlockCipher.cs:line 295
at Encryption.AESGCM.SimpleDecrypt(Byte[] encryptedMessage, Byte[] key, I
nt32 nonSecretPayloadLength)
我看到它使用MAC來檢查密文未被篡改。我所做的只是使用Encoding.UTF8.GetString(encryptAESGCM)
將加密結果(byte [])作爲字符串添加到json字符串中,然後將其保存到Couchbase。當我收回存儲的字符串I Encoding.UTF8.GetBytes(encryptAESGCM)
,然後嘗試解密它。這會影響MAC嗎?有沒有解決的辦法?還有其他問題嗎?
當解密使用的是'salt'加密時並沒有發揮作用。 – usr
對不起,我截掉了代碼,錯過了將它保存到db的部分。我使用的salt(nonSecretPayload)被保存並且被檢索爲var salt。 –