Encryption PCLCrypto非对称加密失败,前导零填充公钥

Encryption PCLCrypto非对称加密失败,前导零填充公钥,encryption,rsa,public-key-encryption,pcl-crypto,Encryption,Rsa,Public Key Encryption,Pcl Crypto,运行以下代码失败。导入公钥时,其中一个RSA参数似乎被前导零填充,导致publickKey为520位,而不是privateKey的512位 public static void Test() { var algorithm = WinRTCrypto.AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithm.RsaPkcs1); ICryptographicKey privateKey = algorithm

运行以下代码失败。导入公钥时,其中一个RSA参数似乎被前导零填充,导致
publickKey
为520位,而不是
privateKey
的512位

public static void Test()
{
    var algorithm = WinRTCrypto.AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithm.RsaPkcs1);
    ICryptographicKey privateKey = algorithm.CreateKeyPair(512);
    byte[] publicKeyBytes = privateKey.ExportPublicKey(CryptographicPublicKeyBlobType.X509SubjectPublicKeyInfo);
    ICryptographicKey publicKey = algorithm.ImportPublicKey(publickKeyBytes, CryptographicPublicKeyBlobType.X509SubjectPublicKeyInfo);

    var encryptedValue = WinRTCrypto.CryptographicEngine.Encrypt(publicKey, Encoding.UTF8.GetBytes("test"));
    var decryptedValue = WinRTCrypto.CryptographicEngine.Decrypt(privateKey, encryptedValue);
}
问题似乎在于这一行:

algorithm.ImportPublicKey(publickKeyBytes, CryptographicPublicKeyBlobType.X509SubjectPublicKeyInfo);
publicKeyBytes似乎是正确的。它与另一个使用它加密一些我可以成功解密的数据的服务对抗。这个问题是当我试图为单元测试创建一些虚拟加密数据时出现的

我使用.NETFramework 4.5在一个可移植类库中运行这段代码

上面的代码在尝试解密的行中抛出一个
System.Security.Cryptography.cryptographyException
,并显示以下消息:

要解密的数据超过此模数64的最大值 字节

以下断言失败:

Assert.Equals(privateKey.KeySize, publicKey.KeySize)
执行以下操作,从模数中删除填充零,修复公钥,一切正常

RSAParameters rsaPublicParameters = publicKey.ExportParameters(false);
rsaPublicParameters.Modulus = rsaPublicParameters.Modulus.Skip(1).ToArray();
ICryptographicKey workingPublicKey = algorithm.ImportParameters(rsaPublicParameters);

这是PCLCrypto中的错误还是我使用它时出错。

“…失败…”。你必须明确它是如何失败的。大整数的外部/内部表示不一定与您有关。通常用前导零字节表示高阶字节大于127的大整数。@JamesKPolk Sorry有点快。当我试图解密加密的数据时,它失败了。问题是公钥的长度为520,私钥的长度为512。我将使用引发的异常更新问题。异常是自解释的。再说一遍,520对512不是问题所在。@JamesKPolk你能给我解释一下吗?因为我不明白。如果我从私钥512位密钥导出,请以X509格式导出公钥blob。为什么密钥在导入并用于加密时会增长1字节,达到520位?导致解密失败。我知道RSA加密数据的时间不能超过密钥大小。为什么当我试图用64字节的私钥解密65字节的加密数据时,它也失败了。