Tag: rsa

如何从P,Q和E计算用于RSA加密的D.

我试图用P , Q和E找到D ( Dp , Dq和(p -1 mod q)也可用)。 根据这个答案和这个问题的回答和更新使用以下方法我应该得到D 为了测试这一点,我生成了密钥对,并尝试从现有组件中计算组件,并将结果与​​原件进行比较。 除D外,所有结果都很好。 我从上面的答案中复制了我的计算错误。 如果有人能告诉我我做错了什么会很棒。 测试代码 using System; using System.Numerics; using System.Security.Cryptography; using System.Text; class Program { static RSAParameters key = new RSAParameters() { P = new byte[]{ 0xDE, 0xA6, 0x35, 0x0B, 0x0A, 0xA5, 0xD7, 0xA0, 0x5C, 0x49, 0xEA, 0xD1, 0x3F, 0xA6, 0xF5, 0x12, 0x19, […]

在C#中实现RSA

我目前正在尝试使用RSACrytoServiceProveider类实现一个类来处理我的应用程序实例之间的安全通信。 第一个问题:实现单个类来处理发送者/接收者角色或者我应该将角色分成单个类是一个好主意吗? 这是我到目前为止所做的: using System; using System.Text; using System.Security.Cryptography; namespace Agnus.Cipher { public class RSA { private byte[] plaintextBytes; private byte[] ciphertextBytes; private RSACryptoServiceProvider rSAProviderThis; private RSACryptoServiceProvider rSAProviderOther; public string PublicKey { get { return rSAProviderThis.ToXmlString(false); } } public RSA() { rSAProviderThis = new RSACryptoServiceProvider { PersistKeyInCsp = true }; plaintextBytes = Encoding.Unicode.GetBytes(PublicKey); } public […]

解码OAEP填充时发生错误

在使用RSACryptoServiceProvider.Decrypt解密文本时,我收到错误: 解码OAEP填充时发生错误。 这是我的代码: CspParameters cspParam = new CspParameters(); cspParam = new CspParameters(); cspParam.Flags = CspProviderFlags.UseMachineKeyStore; clsCertificates cc = new clsCertificates(); string a = “”; cc.OpenStoreIE(ref a); cc.SetProperties(); X509Certificate2 cert = new X509Certificate2(); cert = cc.x509_2Cert; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspParam); //to gentrate private and public keys from the certificate rsa.FromXmlString(cert.PublicKey.Key.ToXmlString(false)); String publicKey = rsa.ToXmlString(false); // […]

.NET中的RSA加密/解密问题

我在使用RSA进行C#加密和解密时遇到问题。 我开发了一个Web服务,将发送敏感的财务信息和交易。 我希望能够做的是在客户端,使用客户端RSA私钥加密某些字段,一旦它到达我的服务,它将使用客户端公钥解密。 目前我不断得到一个“要解密的数据超过了这个128字节模数的最大值。” 例外。 我没有太多关于C#RSA加密技术,所以任何帮助都将非常感激。 这是我用来生成密钥的方法 private void buttonGenerate_Click(object sender, EventArgs e) { string secretKey = RandomString(12, true); CspParameters param = new CspParameters(); param.Flags = CspProviderFlags.UseMachineKeyStore; SecureString secureString = new SecureString(); byte[] stringBytes = Encoding.ASCII.GetBytes(secretKey); for (int i = 0; i < stringBytes.Length; i++) { secureString.AppendChar((char)stringBytes[i]); } secureString.MakeReadOnly(); param.KeyPassword = secureString; RSACryptoServiceProvider rsaProvider = […]

在.NET上使用RSA私钥签名字符串?

byte[] plaintext = System.Text.Encoding.UTF8.GetBytes(“AAAAAAAAAAAAA”); TextReader trCer = new StreamReader(@”AA.key”); //key in PEM format PemReader rdCer = new PemReader(trCer); AsymmetricCipherKeyPair o = rdCer.ReadObject() as AsymmetricCipherKeyPair; ISigner sig = SignerUtilities.GetSigner(“MD5WithRSAEncryption”); sig.Init(true, o.Private); sig.BlockUpdate(plaintext,0,plaintext.Length); Byte[] signature = sig.GenerateSignature(); string signatureHeader = Convert.ToBase64String(signature); Console.WriteLine(signatureHeader); 如何使用DER格式的密钥? 我正在使用库BouncyCastle.Crypto.dll `

使用c#中的私钥对数据进行签名

我需要使用一个私钥使用算法SHA1RSA,Rsa密钥长度2048和64基本编码来签署一些数据。我的代码是这样的 string sPayload = “”; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(“URI”); httpWebRequest.ContentType = “application/json; charset=utf-8”; httpWebRequest.Method = WebRequestMethods.Http.Post; using (StreamWriter streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { sPayload = “{\”id\”:\”14123213213\”,” + “\”uid\”:\”teller\”,” + “\”pwd\”:\”abc123\”,” + “\”apiKey\”:\”2343243\”,” + “\”agentRefNo\”:\”234324324\”}”; httpWebRequest.Headers.Add(“SIGNATURE”, Convert.ToBase64String(new System.Security.Cryptography.SHA1CryptoServiceProvider().ComputeHash(Encoding.ASCII.GetBytes(sPayload)))); streamWriter.Write(sPayload); streamWriter.Flush(); streamWriter.Close(); } System.Net.ServicePointManager.Expect100Continue = false; HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream())) { […]

使用C#中的公钥validation使用RS256算法签名的JWT

好吧,我明白我问的问题可能很明显,但不幸的是我缺乏关于这个主题的知识,这个任务对我来说似乎很棘手。 我有一个OpenID Connect Provider返回的id令牌(JWT)。 这里是: eyJraWQiOiIxZTlnZGs3IiwiYWxnIjoiUlMyNTYifQ.ewogImlzcyI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZfV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5NzAsCiAiY19oYXNoIjogIkxEa3RLZG9RYWszUGswY25YeENsdEEiCn0.XW6uhdrkBgcGx6zVIrCiROpWURs-4goO1sKA4m9jhJIImiGg5muPUcNegx6sSv43c5DSn37sxCRrDZZm4ZPBKKgtYASMcE20SDgvYJdJS0cyuFw7Ijp_7WnIjcrl6B5cmoM6ylCvsLMwkoQAxVublMwH10oAxjzD6NEFsu9nipkszWhsPePf_rM4eMpkmCbTzume-fzZIi5VjdWGGEmzTg32h3jiex-r5WTHbj-u5HL7u_KP3rmbdYNzlzd1xWRYTUs4E8nOTgzAUwvwXkIQhOh5TPcSMBYy6X3E7-_gr9Ue6n4ND7hTFhtjYs3cjNKIA08qm5cpVYFMFMG6PkhzLQ 它的头和有效负载解码如下: { “kid”:”1e9gdk7″, “alg”:”RS256″ }. { “iss”: “http://server.example.com”, “sub”: “248289761001”, “aud”: “s6BhdRkqt3”, “nonce”: “n-0S6_WzA2Mj”, “exp”: 1311281970, “iat”: 1311280970, “c_hash”: “LDktKdoQak3Pk0cnXxCltA” } 从IODC提供商的发现中,我得到了公钥(JWK): { “kty”:”RSA”, “kid”:”1e9gdk7″, “n”:”w7Zdfmece8iaB0kiTY8pCtiBtzbptJmP28nSWwtdjRu0f2GFpajvWE4VhfJAjEsOcwYzay7XGN0b-X84BfC8hmCTOj2b2eHT7NsZegFPKRUQzJ9wW8ipn_aDJWMGDuB1XyqT1E7DYqjUCEOD1b4FLpy_xPn6oV_TYOfQ9fZdbE5HGxJUzekuGcOKqOQ8M7wfYHhHHLxGpQVgL0apWuP2gDDOdTtpuld4D2LK1MZK99s9gaSjRHE8JDb1Z4IGhEcEyzkxswVdPndUWzfvWBBWXWxtSUvQGBRkuy1BHOa4sP6FKjWEeeF7gm7UMs2Nm2QUgNZw6xvEDGaLk4KASdIxRQ”, “e”:”AQAB” } 那么,问题是如何在C#中使用我所获得的RS256算法的公钥来validation这个JWT? 如果有一个很好的教程明确地描述这个过程,那将是很棒的。 但是,使用System.IdentityModel.Tokens.Jwt如何执行此操作的示例也可以正常工作。 更新:我明白,我需要做类似下面的代码,但我不知道在哪里获得用于计算SHA256哈希的“ 密钥 ”。 string tokenStr = “eyJraWQiOiIxZTlnZGs3IiwiYWxnIjoiUlMyNTYifQ.ewogImlzcyI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZfV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5NzAsCiAiY19oYXNoIjogIkxEa3RLZG9RYWszUGswY25YeENsdEEiCn0.XW6uhdrkBgcGx6zVIrCiROpWURs-4goO1sKA4m9jhJIImiGg5muPUcNegx6sSv43c5DSn37sxCRrDZZm4ZPBKKgtYASMcE20SDgvYJdJS0cyuFw7Ijp_7WnIjcrl6B5cmoM6ylCvsLMwkoQAxVublMwH10oAxjzD6NEFsu9nipkszWhsPePf_rM4eMpkmCbTzume-fzZIi5VjdWGGEmzTg32h3jiex-r5WTHbj-u5HL7u_KP3rmbdYNzlzd1xWRYTUs4E8nOTgzAUwvwXkIQhOh5TPcSMBYy6X3E7-_gr9Ue6n4ND7hTFhtjYs3cjNKIA08qm5cpVYFMFMG6PkhzLQ”; string[] tokenParts = tokenStr.Split(‘.’); RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.ImportParameters( new […]

如何在C#中导入PKCS#8 RSA privateKey(由OpenSSL创建)

我试图找到一种方法来读取在C#中使用OpenSSL PKCS#8 RSA创建的privateKey,而无需使用外部库。 有人知道我怎么做吗?

如何使用rs256算法使用我自己的rsa私钥来签名字节?

我有自己的私钥字符串,即 —–BEGIN RSA PRIVATE KEY—– MIICXAIBAAKBgQCSAYYgzvGTww…. …. …. ….. 3yUMYj9oYzqdrRHP0XgD0cEEvyqPBwLaNsRdFwy5qTiHjj0f+ZWHQWmqcoLmmpzyZEbIvQm/VhbjRF6iKG4WZ9Hfa7ntYRNGdWgD/KMIeZI= —–END RSA PRIVATE KEY—– 现在,我需要在C#中使用此私钥签署我的声明集以生成JWT有效负载。 我写了以下代码: var utc0 = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); var issueTime = DateTime.Now; var iat = (int)issueTime.Subtract(utc0).TotalSeconds; var exp = (int)issueTime.AddMinutes(55).Subtract(utc0).TotalSeconds; var payload = new { iss = email, prn = prn, scope = “scope”, aud […]

从私有指数(d),公共指数(e)和模数(n)计算素数p和q

如何从e(publickey),d(私钥)和模数计算p和q参数? 我手头有BigInteger键我可以将粘贴复制到代码中。 一个公钥,一个私钥和一个模数。 我需要从中计算RSA参数p和q。 但我怀疑有一个库,我无法用谷歌找到它。 有任何想法吗? 谢谢。 这不一定是暴力,因为我不是在私钥之后。 我只有一个遗留系统,它存储公钥,私钥对和模数,我需要将它们放入c#以与RSACryptoServiceProvider一起使用。 因此,它归结为计算(p + q) public BigInteger _pPlusq() { int k = (this.getExponent() * this.getD() / this.getModulus()).IntValue(); BigInteger phiN = (this.getExponent() * this.getD() – 1) / k; return phiN – this.getModulus() – 1; } 但这似乎不起作用。 你能发现问题吗? 5个小时后…… 🙂 好。 如何在C#中选择Zn *( http://en.wikipedia.org/wiki/Multiplicative_group_of_integers_modulo_n )中的随机数?