使用某些加密算法时出现ArgumentException和NotImplementedException
我目前正在使用Windows运行时中的加密功能。当使用某些加密算法时,我得到一个NotImplementedException(AesCcm,AesGcm)或一个ArgumentException(AesEcb,AesEcbPkcs7,DesEcb,DesEcbPkcs7,Rc2Ecb,Rc2EcbPkcs7,Rc4,TripleDesEcb,TripleDesEcbPkcs7)。使用某些加密算法时出现ArgumentException和NotImplementedException
我使用每个算法的正确密钥长度(我认为错误的密钥长度会触发ArgumentException)。对于RC4,我使用一个大小为1024的密钥,因为密钥是可变的。当使用没有填充的版本时,我自己将数据填充到块长度。我了解到,使用CCM和GCM的AES显然不能在Windows 8,64位上实现。但ECB密码模式和RC4的变体的ArgumentException是奇怪的。
这里是一个示例代码:
SymmetricKeyAlgorithmProvider symmetricKeyAlgorithmProvider = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesEcbPkcs7);
byte[] plainText = {1, 2, 3, 4, 5, 6, 7, 9, 9, 0};
const uint keySize = 256;
byte[] key = CryptographicBuffer.GenerateRandom(keySize).ToArray();
uint blockLength = symmetricKeyAlgorithmProvider.BlockLength;
byte[] initializationVector =
CryptographicBuffer.GenerateRandom(blockLength).ToArray();
CryptographicKey cryptographicKey =
symmetricKeyAlgorithmProvider.CreateSymmetricKey(key.AsBuffer());
// This line throws an ArgumentException. The exception gives no hint what
// argument is meant and why the value is invalid.
byte[] cipherText = CryptographicEngine.Encrypt(cryptographicKey,
plainText.AsBuffer(), initializationVector.AsBuffer()).ToArray();
顺便说一句:我知道,欧洲央行不认为是安全的。但是微软在某些算法中包含了ECB。这必须有一个原因(并行化或如此)。
例如,使用AesCbcPkcs7的代码非常相同。在ECB和PKCS7中使用AES的.NET的类似代码,密钥长度为256,IV大小等于块长度,同样可以在同一台机器上使用。
ArgumentException可能是什么意思?
回答:
我发现了自己对ArgumentException的回答:即使对于不使用它的算法(如ECB密码模式或RC4),我也传递了一个初始化向量。这些算法要求将初始化向量作为null传递。
以上是 使用某些加密算法时出现ArgumentException和NotImplementedException 的全部内容, 来源链接: utcz.com/qa/259389.html