c# rsa加密需要xml公钥 如何将pem格式转换成xml (c# rsa只支持XML格式的)
RSA PEM格式(蓝色部分是
公钥=publicKey
):
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUABgQD5MIb5ZQhNGhsUjfFbn7y6nY6tsqV9LcC2s/rLpu9sz8CplsTy2SuTG0o7y9ICXW6oRUC9bVxI8TfTK4bbSrNQ6UoExzQFdbc3pEGun3iCy+inBhIC6xf5Z7lN+WqTKCZ607iLwKh+wDdZc6U4x1rxF4vngk1sXIdnYEoGjpRNLQIDAQAB
-----END PUBLIC KEY-----
使用BouncyCastle组件,PM> Install-Package BouncyCastle
/// <summary>
/// RSA公钥格式转换,
/// </summary>
/// <param name="publicKey">pem公钥</param>
/// <returns></returns>
public static string RSAPublicKeyXML(string publicKey)
{
RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKey));
return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent></RSAKeyValue>",
Convert.ToBase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()),
Convert.ToBase64String(publicKeyParam.Exponent.ToByteArrayUnsigned()));
}
最终写法:
/// <summary>
/// RSA公钥pem-->XML格式转换,
/// </summary>
/// <param name="publicKey">pem公钥</param>
/// <param name="content">要加密的内容:比如密码</param>
/// <returns></returns>
public string RSAPublicKey(string publicKey,string content)
{
RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKey));
string XML = string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent></RSAKeyValue>",
Convert.ToBase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()),
Convert.ToBase64String(publicKeyParam.Exponent.ToByteArrayUnsigned()));
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] cipherbytes;
rsa.FromXmlString(XML);
cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);
return Convert.ToBase64String(cipherbytes);
}
XML to PEM 和 PEM to XML相互转换:
https://superdry.apphb.com/tools/online-rsa-key-converter
在线RSA加密解密,RSA公钥私钥加密解密
http://www.metools.info/code/c81.html
JS加密公钥的方法:
var crypt = new JSEncrypt({
default_key_size: 1024
});
crypt.setPublicKey("MIGfMA0GCSqGSIb3DQEBAQgQDIDOFZiLonAYjlUg+fLIs6HbMFpnw+legVMfVsBB+lnsLYsaPYv/0RMMvjY06uPmdya6ymmYxRieGJiaf0N024oHNqtGnSNK/a8YP1nZLBtBwk2VzEb/rBbdCLhkznIOkNMwy20VG/M5LOXiLkYRry8AEQIDAQAB");
var PWD = crypt.encrypt('1');
console.log(PWD);------------->最终的公钥加密字符串,可以用于向后台接口请求数据。
c# rsa加密需要xml公钥 如何将pem格式转换成xml (c# rsa只支持XML格式的)RSA PEM格式(蓝色部分是公钥=publicKey):-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUABgQD5MIb5ZQhNGhsUjfFbn7y6nY6tsqV9LcC2s/rLpu9sz8CplsTy2SuTG0o7y9ICXW6oRUC9bVxI8TfTK4bbSrNQ6UoExzQFdbc3pEGun3iCy+inBhIC6xf5Z7..
有和银行或者支付公司对接过API接口的人都知道,为了保证数据传输过程中的安全性,大部分公司会选择证书来进行签名和验证。证书有不同格式的,如 .cer .pfx .
pem
等。下面就来看看 .
pem
格式证书如何转换成
xml
字符串。
1.假设证书路径存放在(F:/cer/public.
pem
和 F:/cer/private.
pem
)
2.添加BouncyCastle.Crypt...
C#使用
XML
密钥加密/解密,PHP使用隐蔽的
XML
到
PEM
密钥解密
将公共密钥从
XML
转换为
PEM
: python
Pem
To
Xml
.py -ptox -pub "path/to/public.
pem
"
将公钥从
PEM
转换为
XML
: python
Pem
To
Xml
.py -xtop -p
问题:使用OPENSSL生成的公钥和私钥,需要使用
RSA
算法对AES密钥和参数进行加密、签名,java中可以直接识别
pem
格式的公钥和私钥文件,但是
C#
中只能识别
XML
格式的,所以需要进行转换
注意:
pem
转
XML
时。需要依赖一个第三方库,叫BouncyCastle。官网地址:BouncyCastle(如果从官网下载太慢或无法下载可通过百度网盘下载:https://pan.baidu.com/s/1I7URHC7C89MlqT2OfZUSig
提取码:ri2v )
1.公钥
pem
格式文件转
XML
PEM
私钥文件格式与使用
使用微软的.Net开发时,使用System.Security.Cryptography.
RSA
CryptoServiceProvider类实现
RSA
算法,其直接使用的公钥/私钥格式为
XML
,这是一种特有的格式,其它语言如Java中一般使用
PEM
或DER等格式,OpenSSL规范中特荐为
PEM
格式。
如何在
C#
中使用
PEM
格式密钥?今天先从分析
PEM
公钥开始,后面再分析私钥...
using Org.BouncyCastle.Asn1.Pkcs;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Encodings;
using Org.BouncyCastle.Crypto.Engines;
C#
在using System.Security.Cryptography下有 DESCryptoServiceProvider
RSA
CryptoServiceProvider
DESCryptoServiceProvider 是用于对称加密
RSA
CryptoServiceProvider是用于非对称加密
对称加密的意思:有一个密钥 相当于
加密算法
,加密用它来加密,解密也需要用到它。因为
加密解密
都是用同一个密钥所以叫对称加密。 对称加密有一个坏处只要拥有密钥的人都可以解密。
非对称加密:就是有2个...
今天和客户端对接
RSA
算法的加解密功能,后端是Java,客户端是
C#
实现,
C#
只支持PKCS#1格式的密钥(PKCS#8受限于Unity环境不支持),Java只支持PKCS#8格式的密钥,这就很尴尬了,于是在GitHub上找有没有类库实现,还好找到了个
C#
版的PKCS#8支持实现,于是我就将其改造成Java的工具类。改造自
C#
项目:https://github.com/xiangyuecn/
RSA
-csharp源码见下方,先上使用方法
RSA
Key.java工具类源码
import java.security.*;
import java.security.spec.*;
import javax.
xml
.parsers.DocumentBuilder;
import javax.
xml
...
-----BEGIN
RSA
PRIVATE KEY-----
MIIEpgIBAAKCAQEA0eU3Gfy/ybCZbImniKFW6EZ11YWmt1UYt4dRcxZzPlvceiNW
V2TWjPFsQTHYeEWVDIGhh+oPVJCS6ZCErgBOW2VlLZuR+H87d4oqc...
1、第一步先用openssl将
pem
的key转换为der的key //bin>openssl.exe
rsa
-in
rsa
keydec.
pem
-outform der -out pri.der 2、调用下面的程序直接读取der转换为
c#
所需要的
xml
Key,之后进行密文解密
using System;
using System.IO;
using System.Sec...
源代码在github,实际没啥用,反正我也看不懂是吧
1.2、安装流程
官网有安装包,顶多只能下载项目去运行,直接下载window执行文件,一条龙安装。至于mac的在哪里尚未研究过。
http://slproweb.com/products/Win32OpenSSL.html
下载过后执行exe选择安装路径一直下一步就好了。结束了可能会让你打赏,你要是有钱倒是无所谓。
1.3、配置系统环境
RSA
加密算法
是一种非对称
加密算法
,公钥加密,私钥解密。在
C#
和Java中,都内置了
RSA
加密算法
的实现,但是在使用过程中,由于两个语言的实现细节不同,会导致在
C#
和Java之间进行
RSA
加密的时候出现格式不兼容的问题。
为了解决这个问题,我们可以使用以下方法将
C#
格式的
RSA
公钥/私钥转换为Java格式的
RSA
公钥/私钥:
1. 将
C#
的
RSA
公钥/私钥转换为
XML
格式的字符串。
C#
中,可以使用以下方法将
RSA
公钥/私钥转换为
XML
格式的字符串:
```csharp
string publicKey
Xml
=
rsa
.To
Xml
String(false); // 公钥
string privateKey
Xml
=
rsa
.To
Xml
String(true); // 私钥
2. 将
XML
格式的字符串转换为Java中的BigInteger类型。
Java中,可以使用以下方法将
XML
格式的字符串转换为BigInteger类型:
```java
BigInteger modulus = new BigInteger(1, Base64.getDecoder().decode(modulusString));
BigInteger exponent = new BigInteger(1, Base64.getDecoder().decode(exponentString));
其中,modulusString和exponentString分别是
XML
格式的字符串中的Modulus和Exponent节点的值,使用Base64解码后转为BigInteger类型。
3. 使用BigInteger类型创建Java中的
RSA
PublicKey/
RSA
PrivateKey对象。
Java中,可以使用以下方法创建
RSA
PublicKey/
RSA
PrivateKey对象:
```java
RSA
PublicKeySpec publicKeySpec = new
RSA
PublicKeySpec(modulus, exponent);
RSA
PublicKey publicKey = (
RSA
PublicKey) KeyFactory.getInstance("
RSA
").generatePublic(publicKeySpec);
RSA
PrivateKeySpec privateKeySpec = new
RSA
PrivateKeySpec(modulus, exponent);
RSA
PrivateKey privateKey = (
RSA
PrivateKey) KeyFactory.getInstance("
RSA
").generatePrivate(privateKeySpec);
其中,modulus和exponent是从
XML
格式的字符串中解析得到的BigInteger类型的值。
通过以上步骤,我们就可以将
C#
格式的
RSA
公钥/私钥转换为Java格式的
RSA
公钥/私钥了。
public int id { get; set; }
public string scoreitem { get; set; }
public int score { get; set; }
C# Lamda 表达式 GroupBy实现数据统计分组
qq_52296653:
未能加载文件或程序集“SrvCommon, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”
zwb_578209160: