Tag: rsa

阅读C#和Bouncy Castle的RSA PrivateKey

我已成功使用OpenSSL格式写入公钥和私钥文件。 文件: —–BEGIN PUBLIC KEY—– MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpHCHYgawzNlxVebSKXL7vfc/i hP+dQgMxlaPEi7/vpQtV2szHjIP34MnUKelXFuIETJjOgjWAjTTJoj38MQUWc3u7 SRXaGVggqQEKH+cRi5+UcEObIfpi+cIyAm9MJqKabfJK2e5X/OS7FgAwPjgtDbZO ZxamOrWWL8KGB+lH+QIDAQAB —–END PUBLIC KEY—– —–BEGIN RSA PRIVATE KEY—– MIICXAIBAAKBgQCpHCHYgawzNlxVebSKXL7vfc/ihP+dQgMxlaPEi7/vpQtV2szH jIP34MnUKelXFuIETJjOgjWAjTTJoj38MQUWc3u7SRXaGVggqQEKH+cRi5+UcEOb Ifpi+cIyAm9MJqKabfJK2e5X/OS7FgAwPjgtDbZOZxamOrWWL8KGB+lH+QIDAQAB AoGBAIXtL6jFWVjdjlZrIl4JgXUtkDt21PD33IuiVKZNft4NOWLu+wp17/WZYn3S C2fbSXfaKZIycKi0K8Ab6zcUo0+QZKMoaG5GivnqqTPVAuZchkuMUSVgjGvKAC/D 12/b+w+Shs9pvqED1CxfvtePXNwL6ZNuaREFC5hF/YpMVyg5AkEA3BUCZYJ+Ec96 2cwsdY6HocW8Kn+RIqMjkNtyLA19cQV5mpIP7kAiW6drBDlraVANi+5AgK2zQ+ZT hYzs/JfRKwJBAMS1g5/B7XXnfC6VTRs8AMveZudi5wS/aGpaApybsfx1NTLLsm3l GmGTkbCr+EPzvJ5zRSIAHAA6N6NdORwzEWsCQHTli+JTD5dyNvScaDkAvbYFi06f d32IXYnBpcEUYT65A8BAOMn5ssYwBL23qf/ED431vLkcig1Ut6RGGFKKaQUCQEfa UdkSWm39/5N4f/DZyySs+YO90csfK8HlXRzdlnc0TRlf5K5VyHwqDkatmoMfzh9G 1dLknVXL7jTjQZA2az8CQG0jRSQ599zllylMPPVibW98701Mdhb1u20p1fAOkIrz +BNEdOPqPVIyqIP830nnFsJJgTG2eKB59ym+ypffRmA= —–END RSA PRIVATE KEY—– 公钥当然只包含公钥部分。 使用公钥加密我的消息后。 我想读取私钥文件并解密它,但它不起作用。 我正在尝试读取私钥,因为无法将对象强制转换为不对称密钥。 这是我的代码: public static AsymmetricKeyParameter ReadAsymmetricKeyParameter(string pemFilename) { var fileStream = System.IO.File.OpenText(pemFilename); var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(fileStream); var KeyParameter […]

如何从.NET导入RSA公钥到OpenSSL

我有一个.NET程序和Borland Win32程序需要传递一些加密安全信息。 现在的计划是让.NET应用程序创建一个公钥/私钥对,将公钥存储在磁盘上,并在.NET程序运行时将私钥保存在内存中。 然后,Borland应用程序将从磁盘读取公钥,并使用OpenSSL库使用公钥加密数据并将结果写入磁盘。 最后,.NET应用程序将读取加密数据并使用私钥对其进行解密。 从.NET导出密钥并将其导入OpenSSL库的最佳方法是什么?

如何在C#中解析(转换为RSAParameters)X.509私钥?

我正在使用加密通道来加密两个设备之间的通信。 所以我正在创建一个辅助类来进行加密和解密。 我已经google了很多,发现了一段可以将RSA公钥解析为RSACryptoServiceProvider的代码。 这是代码: public static RSACryptoServiceProvider DecodeX509PublicKey(byte[] x509key) { byte[] SeqOID = { 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00 }; byte[] seq = new byte[15]; MemoryStream mem = new MemoryStream(x509key); BinaryReader binr = new BinaryReader(mem); byte bt = 0; ushort twobytes = 0; try { […]

如何使用C#中的模数,D,指数创建私有RSA密钥?

我有3个字节的数组,长度分别为128,128,3个字节。 我不知道它是什么,但我希望它们是Modulus , D , Exponent 。 现在我如何在C#中使用这些数组来使用RSA解密字节数组? 当我创建一个RSAParameters并将3字节数组分配给Modulus , D , Exponent并尝试在RSACryptoServiceProvider.ImportParameters使用该RSAParameters时,解密失败说明损坏的密钥。 我猜其他参赛作品也需要填写DQ , DP等… 我如何在C#中做到这一点? 我没有这个值,有没有一种简单的方法来解密字节数组只使用模数,D,C#中的Exponent,就像在其他语言中一样?

在C#中加载ASN.1 / DER编码的RSA密钥对

我在Crypto ++中创建了DER编码的RSA密钥对,以及密码。 它们是Base64Encoded字符串。 我首先将数据从Base64解码为字节数组,但我不知道如何将它们加载到RSACryptoServiceProvider 。 static void Main() { string pbkeystr = “mypublickey”; string pvkeystr = “myprivatekey”; string cipherstr = “mycipher”; byte[] pbkey = Convert.FromBase64String(pbkeystr); byte[] pvkey = Convert.FromBase64String(pvkeystr); byte[] cipher = Convert.FromBase64String(cipherstr); RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); //Set keys here.. //Decrypt the cipher using private key rsa.Decrypt(pvkey, false); } 没有设置键的function。 我发现唯一的东西是ImportParameters方法,它采用RSAParameters类,它包括p , q , […]

c#RSA从私钥中提取公钥

有没有办法从c#中的私钥中提取公钥? 如果我做了ToXMLString()那么我可以设置是否需要使用私钥保存的公钥信息。 所以现在我认为有一种方法可以从私有中提取公钥吗?

使用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 […]

RSACryptoServiceProvider(.NET的RSA)可以使用SHA256进行加密(不签名)而不是SHA1吗?

加密时,RSACryptoServiceProvider(或.NET提供的任何其他RSA加密器)可以使用SHA256而不是SHA1吗? SHA1似乎是硬编码的,无法更改它。 例如,RSACryptoServiceProvider.SignatureAlgorithm被硬编码为返回“http://www.w3.org/2000/09/xmldsig#rsa-sha1”。 如果无法使RSACryptoServiceProvider使用SHA256,有哪些替代方案? 更新 以下代码完美地运行,但我想将OAEPWithSHA1AndMGF1Padding更改为OAEPWithSHA256AndMGF1Padding。 C#端需要什么才能使用SHA256而不是SHA1进行加密? 加密是在C#中完成的,使用: var parameters = new RSAParameters(); parameters.Exponent = new byte[] {0x01, 0x00, 0x01}; parameters.Modulus = new byte[] {0x9d, 0xc1, 0xcc, …}; rsa.ImportParameters(parameters); var cipherText = rsa.Encrypt(new byte[] { 0, 1, 2, 3 }, true); 解密是在Java中使用: Cipher cipher = Cipher.getInstance(“RSA/NONE/OAEPWithSHA1AndMGF1Padding”, “BC”); cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate()); byte[] cipherText = …; byte[] plainText […]

使用RSA公钥解密使用RSA私钥加密的字符串

我知道我可能会得到的主要答案是你为什么要这么做?! 不幸的是,尽管我有抗议,但我必须这样做,尽管我知道它没什么意义。 我有.Net编写的函数使用私钥解密,使用公钥加密。 我也签署并validation并对我认为这一切的工作方式有一个合理的理解。 我现在被发送一个使用私钥进行RSA加密的值,我应该通过使用公钥解密来获得可用值。 我似乎无法弄清楚如何做到这一点。 我是个白痴吗? 这是正常的事吗? 发送给我的人告诉我这在PHP中没问题。 我不知道,还没有使用过PHP。 我找不到一个库,用我所知的任何主要语言,即C ++,Java,C#。 我正在使用的服务器使用.Net。 我希望有人可以帮助我。 如果除了乞求他们改变他们正在做的事情之外还有某种合理的解决方案,那将是很棒的。 这是我的方法(根据Iridium指出的我之前的错误更新)但是当我尝试解密该值时,我得到了一个exception “解码OAEP填充时出错。” 如果我使用rsa.Decrypt(bytes,false),我会得到一个错误的密钥exception。 public static string DecryptUsingPublic(string dataEncrypted, string publicKey) { if (dataEncrypted == null) throw new ArgumentNullException(“dataEncrypted”); if (publicKey == null) throw new ArgumentNullException(“publicKey”); try { RSAParameters _publicKey = LoadRsaPublicKey(publicKey, false); RSACryptoServiceProvider rsa = InitRSAProvider(_publicKey); byte[] bytes = Convert.FromBase64String(dataEncrypted); […]

使用先前生成的带有.net框架的RSA公钥/私钥

我有一个预先存在的RSA加密公钥/私钥对,我需要在.net中使用。 我在网上找到的所有例子都演示了如何生成新的私有/公共对,然后加密/解密。 即。 像这样的东西: const int PROVIDER_RSA_FULL = 1; const string CONTAINER_NAME = “SpiderContainer”; CspParameters cspParams; cspParams = new CspParameters(PROVIDER_RSA_FULL); cspParams.KeyContainerName = CONTAINER_NAME; cspParams.Flags = CspProviderFlags.UseMachineKeyStore; cspParams.ProviderName = “Microsoft Strong Cryptographic Provider”; rsa = new RSACryptoServiceProvider(cspParams); ….. rsa.encrypt(…) rsa.decrypt(…) 可以看出,没有用于指定预先存在的公钥/私钥的途径。 谁会知道如何完成我想要做的事情? 任何帮助将非常感激。 干杯纳伦