使用某些加密算法时出现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

回到顶部