Openssl生成RSA公私钥以及将公钥转换成C#支持的格式
Openssl生成RSA公私钥以及将公钥转换成C#支持的格式
1.RSA算法介绍
RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。RSA的算法涉及三个参数,n、e、d。其中,n是两个大质数p、q的积,n被称为模数,n的二进制表示时所占用的位数,就是所谓的密钥长度。e和d是一对相关的值,e被称为公钥指数,e的值可以任意取,但要求e与(p-1)*(q-1)互质(X.509标准中建议采用65537);d被称为私钥指数,d的值要求满足(d×e)≡1(mod(p-1)×(q-1))。(n,e)两个数作为公钥使用,(n,d)两个数作为私钥使用。
RSA加解密的算法完全相同,设A为明文,B为密文,则:B=A^e(mod n)被称为加密运算;A=B^d(mod n)被称为解密运算。
2.生成私钥文件
可以通过OpenSSL的genrsa程序生成私钥文件,调用命令如下:
openssl genrsa -out key.pem 1024
生成文件名为key.pem,密钥长度为1024的私钥文件,私钥文件同时包含了RSA公钥和私钥两部分。
私钥文件内容如下图所示:
3.将私钥文件转换为公钥文件
可以通过OpenSSL的genrsa程序生成私钥文件,调用命令如下:openssl rsa -in key.pem -pubout -out pubkey.pem 公钥文件包含RSA公钥,即模数n和公钥指数e。
公钥文件内容如下图所示:
4.提取出私钥文件中的模,转化为C#支持的XML文件
C#有一个System.Security.Cryptography模块可以执行RSA加解密运算,可以通过XElement publickeyFromFile = XElement.Load(@"pubkey.xml")方法载入XML格式保存的RSA公钥。我编写了一个Python脚本,从前面生成的私钥文件提取出XML保存的RSA公钥。代码如下所示:
#!/usr/bin/python
#coding:utf-8
import os
import sys
import base64
'''
用Openssl生成服务器私钥文件,
并将公钥变成C#可以使用的xml格式文件
'''
def main():
filepath = "/var/key.pem"
fd_pubkey = open("/var/pubkey.xml", "w")
os.system("/usr/bin/openssl genrsa -out %s 1024 >/dev/null 2>&1" %filepath)
# print filepath
# 提取公钥文件的模
# modulus = os.popen("/usr/bin/openssl rsa -in %s -pubin -modulus -noout" %filepath).read()
# 提取私钥文件的模
modulus = os.popen("/usr/bin/openssl rsa -in %s -modulus -noout" %filepath).read()
# print modulus
modulus1=modulus.split("=", 1)[1].strip()
st=[]
for i in range(len(modulus1)/2):
st.append(int(modulus1[i*2:(i+1)*2], 16))
st1=[]
for i in st:
st1.append(chr(i))
st1=''.join(st1)
modulus2=base64.b64encode(st1)
# print modulus2
exp="AQAB"
RSAKey="<RSAKeyValue><Modulus>"+modulus2+"</Modulus><Exponent>"+exp+"</Exponent></RSAKeyValue>"
fd_pubkey.write(RSAKey)
return 0
if __name__=='__main__':
sys.exit(main())
生成的XML文件如下所示:
<RSAKeyValue><Modulus>t0DhW51Tw8nWkmkO/3+Zlzf1f/DwKwAhS/nh7a/eoICCfMXV4BDUN9iZ6Kjo5KhdSMuedBdBXEM8bmhB5TEEF/4wdNkqt4hkooLRwA81XGjE9vcidEbfdm5CTU/nRSbBLm25ZaRdfmx0T5u1AiUsDyR3cNeqzH++Fh150Sbb9Y0=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>
其中AQAB对应公钥指数65537的BASE64编码值。
Openssl生成RSA公私钥以及将公钥转换成C#支持的格式的更多相关文章
- openssl生成rsa公私钥
1.生成私钥pem, 执行命令openssl genrsa -out rsa_private_key.pem 1024 2.生成公钥,执行命令openssl rsa -in rsa_private_ ...
- openssl生成rsa公私钥对并在java中使用
rsa著名的非对称加密算法,具体实现我也不是很清楚,大概先要了解一下密码学,有一定基础才能去看的东东,这里就先介绍怎么使用rsa为我们服务. 首先openssl这是个集成了众多加密算法的工具,它将这一 ...
- OpenSSL生成RSA公私钥(java)
生成私钥:genrsa -out rsa_private_key.pem 1024 生成公钥:rsa -in rsa_private_key.pem -out rsa_public_key.pem - ...
- java生成RSA公私钥字符串,简单易懂
java生成RSA公私钥字符串,简单易懂 解决方法: 1.下载bcprov-jdk16-140.jar包,参考:http://www.yayihouse.com/yayishuwu/chapter ...
- NetCore 生成RSA公私钥对,公钥加密私钥解密,私钥加密公钥解密
using Newtonsoft.Json; using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Encodings; using ...
- Windows 下使用OpenSSL生成RSA公钥和私钥
Windows 下使用OpenSSL生成RSA公钥和私钥 (1)下载OpenSSL 可到该地址下载OpenSSL: https://www.openssl.org/source/(https://ww ...
- openssl生成RSA密钥证书
1.openssl的安装 2.RSA密钥证书的生成 3.openssl的常用命令 1.openssl的安装 openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用.健壮.功能完备的工具套 ...
- 如何使用openssl生成RSA公钥和私钥对
在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互 ...
- 在Linux下如何使用openssl生成RSA公钥和私钥对
在<Java实现RSA密钥对并在加解密.加签验签中应用的实例>中,我们有用Java代码生成RSA密钥对,其实在Linux操作系统中,用openssl也是很容易生成密钥对的. 一.如果在ub ...
随机推荐
- 基于Spark的GBDT + LR模型实现
目录 基于Spark的GBDT + LR模型实现 数据预处理部分 GBDT模型部分(省略调参部分) GBDT与LR混合部分 基于Spark的GBDT + LR模型实现 测试数据来源http://arc ...
- 昆石VOS2009 VOS3000无漏洞去后门电脑管理客户端大全
注意:您的VOS是什么版本的请使用什么版本的管理客户端,否则无法登陆! ** VOS2009的: ** VOS2009-client-v2.1.2.0.exe 点击这里下载: VOS2009-clie ...
- js DOM操作练习
1.有如下html,如果用js获得被选中的option的text描述(非value)<select id="select_id"> <option vlue ...
- asp.net mvc6学习资料整理
十分钟轻松让你认识ASP.NET MVC6 http://www.cnblogs.com/n-pei/p/4272105.html ASP.NET 5系列教程 (六): 在 MVC6 中创建 Web ...
- 一句powershell调用mimikatz抓密码
mimikatz神器大家都知道吧,可以抓取系统内的明文密码,但是平时我们测试的时候需要把mimikatz的几个文件上传到目标系统上面,然后再手工执行几个命令才能搞定,今天无意访问一个大神的博客,发现其 ...
- 清北考前刷题da5下午好
/* (4,1)*(3,1)*(2,1)的话1变成2然后一直是2 2变成1然后变成3 3变成1然后变成4 4变成1 */ #include<iostream> #include<cs ...
- 使用 typescript 和 canvas 重构snow效果
前言:之前做过一个 snow 效果,但是是直接用 HTML 做的点击此处查看 ,几个星期前,我用 typescript 和 canvas 重构了一下, snow效果是一个很简单的效果,但是用来练手还是 ...
- org.apache.poi.hssf.util.Region
从POI 3.18开始被Deprecated,在3.20版本中被移除了,所以3.20以前的都有 为了避免这个问题,用CellRangeAddress代替Region,其用法相同
- O(1)的快速乘
那么 有位神仙已经说了O(1)的算法(当然不是我) 这是一种骚操作 直接放代码了啊 inline LL mul(LL a,LL b,LL Mod){ LL lf = a * ( b >> ...
- [ZJOI2008]杀蚂蚁
题意翻译 注意在(0,0)已经有蚂蚁的时候是不会生成新蚂蚁的 还有如果有蚂蚁扛着蛋糕,但是不在某个炮的范围内,炮仍然会打最近的蚂蚁 题目描述 最近,佳佳迷上了一款好玩的小游戏:antbuster. 游 ...