Tag: rsa

从RSACryptoServiceProvider创建X509Certificate2失败,无法找到请求的对象

示例代码: CspParameters cspParameters = new CspParameters(); cspParameters.ProviderType = 1; // PROV_RSA_FULL // Create the crypto service provider, generating a new // key. mRsaCSP = new RSACryptoServiceProvider(mDefaultKeyLength, cspParameters); mRsaCSP.PersistKeyInCsp = true; RSAParameters privateKey = mRsaCSP.ExportParameters(true); byte[] rsaBytes = mRsaCSP.ExportCspBlob(true); try { X509Certificate2 cert = new X509Certificate2(rsaBytes); mKeyDataPfx = Convert.ToBase64String(cert.Export(X509ContentType.Pkcs12, password)); } catch (Exception ce) { string […]

RSA解密C#(.NET 3.5)中的数据,该数据在php 5.3.2中使用openssl加密

也许有人可以让我知道。 我一直在冲浪这一段时间。 步骤1:创建根证书 unix上的密钥生成 1) openssl req -x509 -nodes -days 3650 -newkey rsa:1024 -keyout privatekey.pem -out mycert.pem 2) openssl rsa -in privatekey.pem -pubout -out publickey.pem 3) openssl pkcs12 -export -out mycertprivatekey.pfx -in mycert.pem -inkey privatekey.pem -name “my certificate” 步骤#2:根证书是否适用于php:YES PHP方面 我使用publickey.pem将其读入php: $publicKey = “file://C:/publickey.pem”; $privateKey = “file://C:/privatekey.pem”; $plaintext = “123”; openssl_public_encrypt($plaintext, $encrypted, $publicKey); $transfer = […]

将C#RSACryptoServiceProvider代码转换为Java

我需要为项目相关的目的加密String,并由供应商给出相同的代码。 public static string EncryptString(string StringToEncrypt) { RSACryptoServiceProvider provider = new RSACryptoServiceProvider(); string xmlString = “qqoWhMwGrrEBRr92VYud3j+iIEm7652Fs20HvNckH3tRDJIL465TLy7Cil8VYxJre69zwny1aUAPYItybg5pSbSORmP+hMp6Jhs+mg3qRPvHfNIl23zynb4kAi4Mx/yEkGwsa6L946lZKY8f9UjDkLJY7yXevMML1LT+h/a0a38=AQAB20PwC7nSsfrfA9pzwSOnRYdbhOYivFSuERxvXHvNjCll5XdmFYYp1d2evXcXbyj3E1k8azce1avQ9njH85NMNQ==x0G0lWcQ13NDhEcWbA7R2W5LPUmRqcjQXo8qFIaHk7LZ7ps9fAk/kOxaCR6hvfczgut1xSpXv6rnQ5IGvxaHYw==lyybF2qSEvYVxvFZt8MeM/jkJ5gIQPLdZJzHRutwx39PastMjfCHbZW0OYsflBuZZjSzTHSfhNBGbXjO22gmNQ==NJVLYa4MTL83Tx4vdZ7HlFi99FOI5ESBcKLZWQdTmg+14XkIVcZfBxDIheWWi3pEFsWqk7ij5Ynlc/iCXUVFvw==X5Aw9YSQLSfTSXEykTt7QZe6SUA0QwGph3mUae6A2SaSTmIZTcmSUsJwhL7PLNZKbMKSWXfWoemj0EVUpZbZ3Q==jQL4lEUYCGNMUK6GEezIRgiB5vfFg8ql3DjsOcXxnOmBcEeD913kcYnLSBWEUFW55Xp0xW/RXOOHURgnNnRF3Ty5UR73jPN3/8QgMSxV8OXFo3+QvX+KHNHzf2cjKQDVObJTKxHsHKy+L2qjfULA4e+1cSDNn5zIln2ov51Ou3E=”; provider.FromXmlString(xmlString); return Convert.ToBase64String(provider.Encrypt(Encoding.ASCII.GetBytes(StringToEncrypt), false)); } 但是我需要修改或翻译成JAVA。 为了同样的目的,我写了下面的方法。 public static String EncryptString(String strToBeEncrypted) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException { String modulusString = “qqoWhMwGrrEBRr92VYud3j+iIEm7652Fs20HvNckH3tRDJIL465TLy7Cil8VYxJre69zwny1aUAPYItybg5pSbSORmP+hMp6Jhs+mg3qRPvHfNIl23zynb4kAi4Mx/yEkGwsa6L946lZKY8f9UjDkLJY7yXevMML1LT+h/a0a38=”; String publicExponentString = “AQAB”; byte[] modulusBytes = Base64.decodeBase64(modulusString); byte[] exponentBytes = Base64.decodeBase64(publicExponentString); BigInteger modulus […]

使用C#,BouncyCastle和导入的RSA密钥进行RSA签名和validation – 内部使用Python示例和非工作C#代码示例

我一直在试着用C#和BouncyCastle工作来解决RSA数据签名和validation的一个小例子。 RSACryptoServiceProvider.VerifyHash()总是在一个适用于Python和M2Crypto的示例中返回false。 我已经validation了工作示例和C#示例之间的哈希签名是相同的,它就在那里我被卡住了。 我觉得我错过了一些重要的细节。 工作的Python代码和非工作的C#代码如下。 关键是生成的 openssl genrsa -out testkey.pem 1024 openssl rsa -in testkey.pem -pubout > testkey.pub Python代码(工作): private = “””—–BEGIN RSA PRIVATE KEY—– MIICXQIBAAKBgQCxSHbp1ID/XHEdzVzgqYR1F/79PeMbqzuKNZChvt1gFObBhKyB pgaHDHw3UZrO8s/hBEE/Mpe2Lh90ZAFdPIXq+HyVoznXMoJYBv0uLDApvSQbJNOd f7T5VwmpBbkfj1NAlm39Eun9uBSokEOnB24g+bczPQPGOASrQ2Ly9afOZQIDAQAB AoGBAIEzQIZ1OnXgVwfTLMcGg+QaUtkYizUU+9Vj6D4YrZliYjHSkS4DY2p0rOpb 7Ki5yMpCoZJ/OpWo03+tilj6zNUU6X3aHrPPSv8jcsE0sDi9zYJr/Ztk3EG23sad bM28Bb4fV/Z0/E6FZJrmuvI2dZP/57oQSHGOhtkHFO21cW5BAkEA3l/i5Rc34YXc WHYEsOYe0kAxS4dCmhbLWaWvsghW/TomjdxzePsO70GZZqRMdzkfA1iS1OrK+pP4 4suL2rSLrQJBAMwXFnBp4Jmek0CTSxoYf6q91eFm/IRkGLnzE1fEZ76vQOBTas8T /mpjNQHSEywo/QB62h9A8hy7XNrfZJAMJJkCQA5TYwybKFBxDTbts3Op/4ZP+F0D Q7klisglsmHnw6Lgoic1coLyuY2UTkucfgiYN3VBuYPZ9GWcLsZ9km7ufqkCQQCz NVa70Qyqd+cfXfcla/u2pskHCtKTQf3AUmRavhjHBMa39CemvAy7yG9EMP4q2bcH U9jydqnidtdbTavVHQSJAkA0zJtLzHGPtQqQaI7K6kBDXYPqloGnQxHxad0HPx2e Vj2qv1tEsqeG6HC7aL/afXOtxcfjq4oMHbGUjDv+dGfP —–END RSA PRIVATE KEY—–“”” public = “””—–BEGIN PUBLIC KEY—– MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCxSHbp1ID/XHEdzVzgqYR1F/79 PeMbqzuKNZChvt1gFObBhKyBpgaHDHw3UZrO8s/hBEE/Mpe2Lh90ZAFdPIXq+HyV oznXMoJYBv0uLDApvSQbJNOdf7T5VwmpBbkfj1NAlm39Eun9uBSokEOnB24g+bcz PQPGOASrQ2Ly9afOZQIDAQAB —–END PUBLIC KEY—–“”” message […]

如何使用带有RSA私钥的RS256在C#中创建加密的JWT

我正在使用jose-jwt库,并希望使用RS256算法在C#中创建加密的JWT进行加密。 我没有密码学的经验,所以请原谅我的无知。 我在文档中看到以下示例: var payload = new Dictionary() { { “sub”, “mr.x@contoso.com” }, { “exp”, 1300819380 } }; var privateKey=new X509Certificate2(“my-key.p12”, “password”, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet).PrivateKey as RSACryptoServiceProvider; string token=Jose.JWT.Encode(payload, privateKey, JwsAlgorithm.RS256); 它显示了使用p12文件,但是如何使用下面表格的RSA密钥文件? 我正在查看X509Certificate2的文档,但我看不到RSA私钥的选项。 它似乎只接受PKCS7 ,我理解为公钥。 —–BEGIN RSA PRIVATE KEY—– MIICXAIBAAKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUp wmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5 1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56+qGyN8M0RVyaRAXz++xTqHBLh 3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2 pIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVLL6Q02fvLi55/mbSYxECQQDeAw6fiIQX GukBI4eMZZt4nscy2o12KyYner3VpoeE+Np2q+Z3pvAMd/aNzQ/W9WaI+NRfcxUJrmfPwIGm63il AkEAxCL5HQb2bQr4ByorcMWm/hEP2MZzROV73yF41hPsRC9m66KrheO9HPTJuo3/9s5p+sqGxOlF L0NDt4SkosjgGwJAFklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5k X6zk7S0ljKtt2jny2+00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2epl U9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ 37sJ5QsW+sJyoNde3xH8vdXhzU7eT82D6X/scw9RZz+/6rCJ4p0= —–END RSA PRIVATE KEY—– 最后, […]

我何时应该使用SHA-1,何时应该使用SHA-2?

在我的c#应用程序中,我正在使用RSA签名文件,然后由上传的人上传到我公司的数据库中,在这里我必须选择SHA-1或SHA-2来计算哈希值。 与编程中的任何其他组件一样,我知道必须有一个“在这里使用”和“在那里使用”这两个组件。 那么,什么时候? 那时呢? 编辑: 我的问题是:性能有什么不同? 而不是关于安全性,因为我已经知道SHA-2比SHA-1更安全。 在此链接中 ,不同类型的SHA-2之间的比较注意何时使用SHA-512以及何时不使用SHA-512。 我需要一个关于SHA-1和SHA-2的类似论点。

Bouncy Castle,RSA:将密钥转换为String格式

我在我的C#项目中使用RSA(Bouncy Castle API)。 我用这个方法生成了密钥对: RsaKeyPairGenerator r = new RsaKeyPairGenerator(); r.Init(new KeyGenerationParameters(new SecureRandom(), 1024)); AsymmetricCipherKeyPair keys = r.GenerateKeyPair(); AsymmetricKeyParameter private_key = keys.Private; AsymmetricKeyParameter public_key = keys.Public; 现在我想将它们保存在txt文件中,但问题是我无法将它们转换为字符串格式。 我在另一篇文章中读到必须使用以下序列化密钥: PrivateKeyInfo k = PrivateKeyInfoFactory.CreatePrivateKeyInfo(private_key); byte[] serializedKey = k.ToAsn1Object().GetDerEncoded(); 这是正确的方法吗? 如果是,那我该怎么办? 只需将它们从byte []转换为String?

在使用RSA在iPhone上加密的C#中解密时遇到问题

到目前为止,我已经花了两天时间来处理这个问题,并且可以根据我的需要进行梳理,所以这是最后的选择。 我有一个X509证书,其公钥存储在iPhone的钥匙串中(此时仅为模拟器)。 在ASP.NET方面,我在证书库中获得了带有私钥的证书。 当我在iPhone上加密字符串并在服务器上解密它时,我收到CryptographicException “Bad data”。 我尝试了在RSACryptoServiceProvider页面上建议的Array.Reverse,但它没有帮助。 我比较了两侧的64弦,它们是相同的。 我在解码后比较了原始字节数组,它们也相等。 如果我使用公钥在服务器上加密,则字节数组与iPhone的版本不同,并且可以使用私钥轻松解密。 原始明文字符串是115个字符,因此它在我的2048位密钥的256字节限制范围内。 这是iPhone加密方法(几乎逐字逐句来自CryptoExercise示例应用程序的wrapSymmetricKey方法): + (NSData *)encrypt:(NSString *)plainText usingKey:(SecKeyRef)key error:(NSError **)err { size_t cipherBufferSize = SecKeyGetBlockSize(key); uint8_t *cipherBuffer = NULL; cipherBuffer = malloc(cipherBufferSize * sizeof(uint8_t)); memset((void *)cipherBuffer, 0x0, cipherBufferSize); NSData *plainTextBytes = [plainText dataUsingEncoding:NSUTF8StringEncoding]; OSStatus status = SecKeyEncrypt(key, kSecPaddingNone, (const uint8_t *)[plainTextBytes bytes], [plainTextBytes length], cipherBuffer, &cipherBufferSize); […]

.NET私钥Rsa加密

我需要使用RSA 1.5算法加密字符串。 我已获得私钥。 但是,我不能为我的生活弄清楚如何将这个键添加到课堂中。 似乎关键需要是RSAParameter stuct类型。 然而,这需要一组我没有给出的值,如模数,指数,P,Q等。我所拥有的只是私钥。 有人可以帮忙吗?

使用OpenSSL.NET和现有密钥解密RSA

我在下面的代码中使用OpenSSL.Net生成OpenSSL RSA公钥和私钥。 但是,我似乎找不到使用给定私钥解密数据的方法。 我知道如果我调用生成密钥然后相应的方法加密和解密数据它工作正常。 但是,如果我尝试从给定公钥的外部源解密某些内容,我该如何使用该密钥进行解密。 注意:请不要给出不使用OpenSSL.NET的示例。 Microsoft加密提供程序比OpenSSL慢得多,并且不符合我的速度要求。 谢谢! public class AsymmetricKeyResult { public string PublicKey { get; set; } public string PrivateKey { get; set; } public AsymmetricKeyResult(string publicKey, string privateKey) { this.PublicKey = publicKey; this.PrivateKey = privateKey; } } public static AsymmetricKeyResult GenerateAsymmetricKeys(int keyLength) { RSA rsa = new RSA(); rsa.GenerateKeys(keyLength, 0x10021, null, null); […]