问问题
6790 次
1 回答
3
使用密码原语很容易犯实现错误,人们总是这样做,如果可以的话,最好使用高级库。
我有一个片段,我试图保持审查和更新,它非常接近你正在做的事情。它还对密文进行身份验证,如果有对手可以将选择的密文发送到您的解密实现,我会建议这样做,有很多与修改密文相关的旁道攻击。
但是,您遇到的问题与填充没有任何关系,如果您的密文与您的密钥和 iv 不匹配,并且您没有验证您的 iv 和密文,您通常会收到填充错误(如果这是冒泡客户端,则称为填充 oracle)。您需要将主要语句更改为:
string valid128BitString = "AAECAwQFBgcICQoLDA0ODw==";
string inputValue = "Test";
string keyValue = valid128BitString;
byte[] byteValForString = Encoding.UTF8.GetBytes(inputValue);
EncryptResult result = Aes128Utility.EncryptData(byteValForString, keyValue);
EncryptResult encyptedValue = new EncryptResult();
encyptedValue.IV = result.IV; //<--Very Important
encyptedValue.EncryptedMsg = result.EncryptedMsg;
string finalResult =Encoding.UTF8.GetString(Aes128Utility.DecryptData(encyptedValue, keyValue));
因此,您使用与加密相同的 IV 进行解密。
于 2013-02-18T16:19:29.150 回答