Tag: rsa

如何在RSAParameters上设置公钥和私钥以用于RSACryptoServiceProvider?

我在线阅读了一些教程,并生成了公钥和私钥,但是如何将它们设置为在C#中使用? 这是我有的: string publicKey = “…”; string privateKey = “….”; UnicodeEncoding ByteConverter = new UnicodeEncoding(); byte[] dataToEncrypt = ByteConverter.GetBytes(“Data to Encrypt”); byte[] encryptedData; byte[] decryptedData; string decrptedStr = “”; using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider()) { RSAParameters myRSAParameters = RSA.ExportParameters(true); myRSAParameters.Modulus = ByteConverter.GetBytes(publicKey); myRSAParameters.Exponent = ByteConverter.GetBytes(privateKey); encryptedData = RSAEncrypt(dataToEncrypt, myRSAParameters, false); decryptedData = RSADecrypt(encryptedData, myRSAParameters, […]

从bouncycastle导入RSA密钥有时会抛出“坏数据”

有时,(通常足以成为.NET和充气城堡之间的严重问题),由bouncycastle生成的密钥不会导入到dotnet RSA加密提供程序中。 它只会抛出“DonnéesIncorrectes”; 没有更多细节。 (“不良数据”)。 我无法调试问题,因为guilty函数实现似乎隐藏在CLR(Utils._ImportKey();引用源RSACryptoServiceProvider.cs:297)中。 我试过改变“提供者”但没有成功。 这里有同样的问题..通过更改密钥或密钥来解决 : BouncyCastle RSAPrivateKey到.NET RSAPrivateKey ; 它的unit testing失败,密钥大小从512位到2048位不等。 如何解决/调试这样的问题? 坏数据意味着什么? 这是一个值失败的测试用例: [TestCase( “3130061425891827008704201520933220266588903615593292093008732204896232681270200769431823371565724812996700795538563485957721923348815282268698793938491993”,//mod “65537”,//pe “3130061425891827008704201520933220266588903615593292093008732204896232681270200769431823371565724812996700795538563485957721923348815282268698793938491993”,//priv e “108172619413453999338304010966268975159507181290909920458641813606026415083917”,//p “75249617574313725168879024231390763478340191084309820124417146187514704207891”,//q “46308055148448439895562160789624828220320330169183342667312429963694967752481”, //dp “237677507940292370873826357872619864199100043554818389089435727311526981263”, //dq “4755193289666548078142536433103759575424135202658906348751587662200087509503”//qinv )] public void TestBadKeyForMicrosoft(string mo, string pe, string prive, string p, string q, string dp, string dq, string qinv) { var k = new RsaPrivateCrtKeyParameters( […]

使用RSACryptoServiceProvider解密时出现“Bad Key。”exception(C#.NET)

我试图解密以前在RSA中加密的数据(别担心,我应该能够,我有钥匙。没有什么非法:)。 但是,我得到了一个“坏键”。 解密线上的错误。 我确信这个关键是正确的,因为我从矢量中取出它。 矢量在以下代码中提供。 理论上,我有解密的所有信息,虽然它不起作用。 我在想它可能是一种解密的.NET方式,我还不明白。 这是代码: static void Main(string[] args) { byte[] N = // Modulus { 0x00, 0x8C, 0x35, 0x04, 0xC8, 0x40, 0xB3, 0x67, 0xD8, 0x42, 0x35, 0x78, 0xF6, 0x2A, 0x02, 0xBE, 0xF7, 0x1C, 0xCD, 0x9D, 0x98, 0x55, 0x16, 0x3F, 0x81, 0xA4, 0xE5, 0x3E, 0x3D, 0x38, 0x27, 0xEE, 0x0D, 0x8B, 0xAF, 0xB0, […]

openssl.net rsa加密工作示例需要

有没有人使用OpenSSL.NET进行RSA加密的任何工作示例? 我想使用以PEM格式存储的私钥来加密一些数据。 我创建一个OpenSSL.Crypto.RSA对象并希望使用PrivateEncrypt方法,但它抛出OpenSSLException而没有其他数据(空Errors数组,没有内部exception)。 在使用PrivateEncrypt方法之前,我使用从命令openssl rsa -in private_key.pem -text -noout读取的数据填充所有属性(如PublicModulus,PrivateExponent等) 有谁知道如何将PEM文件读入OpenSSL.Crypto.RSA对象或有任何其他工作加密示例?

尝试使用Python从C#代码生成RSA签名

我正在使用别人的代码生成用于在xbox 360保存文件中进行validation的RSA签名。 代码从文件中读取所需的值并正确生成签名。 代码是: byte[] xHash=null; RSAParameters xParams = new RSAParameters(); br.BaseStream.Position = 0x1A8; xParams.D = br.ReadBytes(0x80); xParams.Exponent = br.ReadBytes(0x4); xParams.Modulus = br.ReadBytes(0x80); xParams.P = br.ReadBytes(0x40); xParams.Q = br.ReadBytes(0x40); xParams.DP = br.ReadBytes(0x40); xParams.DQ = br.ReadBytes(0x40); xParams.InverseQ = br.ReadBytes(0x40); br.close(); br=new BinaryReader(File.OpenRead(f)); br.BaseStream.Position=0x22c; xHash = new SHA1CryptoServiceProvider().ComputeHash(br.ReadBytes(0x118)); byte[] xrsa=SignatureGenerate(xParams, xHash); public static byte[] SignatureGenerate(RSAParameters xParam, byte[] […]

RSA Public exponent默认为65537.该值应该是多少? 我的选择有什么影响?

我正在为可能遇到不同指数大小的软件创建unit testing。 ( 参见本RFC第3.3.1节 ) 如何使用Bouncy Castle或任何其他C#库生成密钥大小为65537的RSA密钥对。 如果答案是我可以直接修改它,只要我更新私钥,我应该对公钥和私钥进行哪些具体的更改(或重新计算)? 这是我用来创建指数为65537的密钥的示例代码: // Create key RsaKeyPairGenerator generator = new RsaKeyPairGenerator(); var param = new KeyGenerationParameters(new SecureRandom(), 1024); generator.Init(param); AsymmetricCipherKeyPair keyPair= generator.GenerateKeyPair(); // Save to export format SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keyPair.Public); byte[] ret = info.GetEncoded(); string ovalue1 = Convert.ToBase64String(ret); // Read from export format byte[] publicKeyBytes = Convert.FromBase64String(ovalue1); AsymmetricKeyParameter […]

在c#中使用RSACryptoServiceProvider查找公钥和私钥

我有以下代码。 RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); //Save the public key information to an RSAParameters structure. RSAParameters RSAKeyInfo = RSA.ExportParameters(true); byte[] toEncryptData = Encoding.ASCII.GetBytes(“hello world”); byte[] encryptedRSA = RSAEncrypt(toEncryptData, RSAKeyInfo, false); string EncryptedResult = System.Text.Encoding.Default.GetString(encryptedRSA); byte[] decryptedRSA = RSADecrypt(encryptedRSA, RSAKeyInfo, false); string originalResult = System.Text.Encoding.Default.GetString(decryptedRSA); return userDetails.ToString(); 当我使用RSAEncrypt方法时,它采用参数“RSAKeyInfo”(用于加密的公钥和用于解密的私钥)。 如何获取私钥和​​公钥的值,此方法用于加密和解密。 谢谢,

带有公钥的RSA C#加密用于PHP openssl_private_decrypt():Chilkat,BouncyCastle,RSACryptoServiceProvider

我正在尝试加密C#应用程序中的字符串,以便在PHP端使用openssl_private_decrypt()对其进行解密。 我试图解密的初始公钥是从PHP的openssl_pkey_get_details($ privateKey)中获得的; 提前说,我能够使用chilkat,但它在iOS下的单触function中无效,所以它对我来说没用(而且它的成本也相当高)。 有代码示例我是如何做到的: void TestEncryption(string publicKey, string data) { var bytes = Encoding.UTF8.GetBytes(data); //by using chilkat var key = new Chilkat.PublicKey(); var result = key.LoadOpenSslPem(publicKey); var ck = new Chilkat.Rsa(); ck.UnlockComponent(“blablabla”); var keyXml = key.GetXml(); ck.ImportPublicKey(keyXml); var ckBytes = ck.EncryptBytes(bytes, false); //by using BouncyCastle Object obj; using (TextReader sr = new StringReader(publicKey)) { […]

C#中的RSA实现

我试图在C#中实现RSA算法。 下面的代码在p和q较小时起作用,但在尝试复制RSA-100或更大时p和q非常大时不起作用。 例如: p = 61, q = 53, n = 3233, phi(n) = 3120, e = 17, d = 2753 一旦解密,我得到正确的原始消息。 我从RSA维基百科页面获得了这些值。 该代码也适用于p和q的其他小值。 但是,当使用RSA-100或更高版本时,我不会收到原始邮件。 我已经尝试对指数(e)使用不同的值并确保它与phi(n)互质但我无法得到正确的结果。 我错过了一些简单/明显的东西吗? 预先感谢您的帮助! //p and q for RSA-100 //string p = “37975227936943673922808872755445627854565536638199”; //string q = “40094690950920881030683735292761468389214899724061”; string p = “61”; string q = “53”; //Convert string to BigInteger BigInteger rsa_p […]

使用C#生成的数字签名无法在C ++中进行validation

我有一个C#应用程序,它使用RSA对数据进行数字签名。 代码如下: RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.ImportCspBlob(privateKeyBlob); SHA1 sha1 = new SHA1CryptoServiceProvider(); sha1.ComputeHash(myData); byte[] signature = rsa.SignHash(sha1.Hash, CryptoConfig.MapNameToOID(“SHA1”)); 我无法在C ++中validation签名。 代码如下: HCRYPTPROV cryptProvider; CryptAcquireContext(&cryptProvider, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); // PROV_RSA_SIG does not work HCRYPTKEY publicKey; CryptImportKey(cryptProvider, publicKeyBlob, publicKeyBlobLength, 0, 0, &publicKey); HCRYPTHASH hash; CryptCreateHash(cryptProvider, CALG_SHA1, 0, 0, &hash); CryptHashData(hash, myData, myDataLength, 0); BOOL isSigOk […]