Tag: encryption asymmetric

Bouncy Castle PGP解密问题

我有一个使用Bouncy Castle进行PGP解密的应用程序,在过去的8个月左右没有任何问题,过去2天突然出现了GetDataStream方法引发exception的问题: exception消息:“错误设置非对称密码”。 内部exception消息:“不是RSA密钥”。 private static PgpObjectFactory getClearDataStream(PgpPrivateKey privateKey, PgpPublicKeyEncryptedData publicKeyED) { // Exception throws here. Stream clearStream = publicKeyED.GetDataStream(privateKey); PgpObjectFactory clearFactory = new PgpObjectFactory(clearStream); return clearFactory; } 密钥尚未过期,没有到期日期: 我没有对应用程序进行任何更改,我没有触及按键,所以我不太明白为什么一个问题突然出现了。 有任何想法吗? 我还可以使用我在应用程序中加载的相同密钥使用Kleopatra手动解密文件。 更新1 – 我下载了OpenPGP Library for .NET的免费试用版,它也希望使用BouncyCastle,我也没有问题使用相同的密钥解密文件。 出于某种原因,我使用已经工作了几个月的BouncyCastle实现的解密由于某种原因而停止工作,我还无法识别。 更新2 – 我上周提取的文件有效,我还下载了BouncyCastle的源代码,以便我可以单步调试以查看exception抛出的位置以及变量在工作和一个不起作用的文件。 在PgpPublicKeyEncryptedData类的GetDataStream方法的开头抛出exception: byte[] plain = fetchSymmetricKeyData(privKey); 当我进入这个方法时,对于我可以解密而没有任何问题的文件,我注意到keyData.Algorithm变量设置为“ElGamalEncrypt”,而对于exception抛出的文件,文件keyData.Algortithm设置为“RsaGeneral”。 为什么这些不同? 公司发送文件是否改变了加密方法? BouncyCastle是否未正确支持此加密方法? private byte[] fetchSymmetricKeyData(PgpPrivateKey privKey) […]

无法解密RSA加密密钥

长话短说,我正在使用DES而我正在使用RSA加密密码进行密钥交换,密码不超过16个字符问题是当我加密密钥时,加密的大小对我来说太大了解密这里是我的rsa加密和解密代码: 加密: – 我一直在尝试将localpwd作为“asd” byte[] plaintext = utf8.GetBytes(localpwd); byte[] ciphertext = rsaservice.Encrypt(plaintext, false); string cipherresult = Convert.ToBase64String(ciphertext); 然后我打印文本框上的加密密钥并尝试解密 byte[] ciphertext = utf8.GetBytes(filetest.Text); byte[] plain = rsaservice.Decrypt(ciphertext, true); string plaintext = utf8.GetString(plain); 我得到“要解密的数据超过这个256字节模数的最大值”。 我尝试增加密钥大小,以便能够加密和解密更大的密钥大小,但增加密钥只会增加加密数据的大小导致相同的错误,请帮助!

C#中的大数据RSA加密

这是我的第一篇文章,所以希望我没有错过任何重要的内容。 我在C#中做一个项目,我需要使用公钥/私钥加密来加密消息,然后通过SSL连接发送它。 根据文档,我选择使用RSACryptoService ,这是用于加密数据的唯一非对称加密方案。 问题是我遇到了很多问题。 (我想做对称加密,但这不是我老师要我做的事情,根据他的说法,确定块大小应该很容易,然后它应该为你完成所有的工作。)好吧,到目前为止没有运气,我尝试了一些不同的方法,但现在我又回到了基础并再次尝试,这是我目前的代码: public string[] GenerateKeysToStrings(string uniqueIdentifier) { string[] keys; using (var rsa = new RSACryptoServiceProvider(4096)) { try { string privateKey = rsa.ToXmlString(true); string publicKey = rsa.ToXmlString(false); this.pki.StoreKey(publicKey, uniqueIdentifier); keys = new string[2]; keys[0] = privateKey; keys[1] = publicKey; } finally { //// Clear the RSA key container, deleting generated keys. rsa.PersistKeyInCsp […]

使用RSACryptoServiceProvider进行公钥加密

我已经在CodeProject上发表了一篇文章,解释了如何使用RSA提供程序进行加密和解密: RSA私钥加密 虽然2009年的旧版本是错误的,但新的2012版本(具有System.Numerics.BigInteger支持)似乎更可靠。 这个版本缺少的是一种使用公钥加密并使用私钥 解密的方法。 所以,我自己尝试了,但是当我解密时会得到垃圾。 我不熟悉RSA提供商,所以我在这里很黑暗。 很难找到关于它应该如何工作的更多信息。 有谁看到这有什么问题? 以下是带有PUBLIC密钥的ENcryption: // Add 4 byte padding to the data, and convert to BigInteger struct BigInteger numData = GetBig( AddPadding( data ) ); RSAParameters rsaParams = rsa.ExportParameters( false ); //BigInteger D = GetBig( rsaParams.D ); //only for private key BigInteger Exponent = GetBig( rsaParams.Exponent ); BigInteger Modulus […]