当前位置:首页 » 密码管理 » python实现rsa加密

python实现rsa加密

发布时间: 2023-05-21 18:35:22

‘壹’ java生成的rsa公钥 能在python上使用吗

肯定可以,这个跟语言是无关的

Python上RSA加密的库挺多的,最开始使用的是rsa,因为比较简单嘛!测试的时候也是用 python模拟App的访问,顺利通过!
然而App开发者反馈,python测试脚本没法移植到java上,因为java的加密解密模块需要更加精细的算法细节指定,否则java加密过的数据python是解不出来的。
当初就是因为rsa模块简单,不需要注重细节才选的,自己又不是专业搞加密解密的。没办法了,只能硬着头皮,捋了一遍RSA的加密原理。网上还是有比较多的讲述比较好的文章,比如RSA算法原理
原理是懂了,但具体到python和java的区别上,还是一头雾水。最终python的RSA模块换成Crypto,因为支持的参数比较多。搜了很多网站讲的都不是很详细,stackflow上有几篇还可以,借鉴了一下,最后测试通过了。还是直接上代码吧。
Java代码
//下面这行指定了RSA算法的细节,必须更python对应
private static String RSA_CONFIGURATION = "RSA/ECB/OAEPWithSHA-256AndMGF1Padding";
//这个貌似需要安装指定的provider模块,这里没有使用
private static String RSA_PROVIDER = "BC";

//解密 Key:私钥
public static String decrypt(Key key, String encryptedString){

try {
Cipher c = Cipher.getInstance(RSA_CONFIGURATION);
c.init(Cipher.DECRYPT_MODE, key, new OAEPParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256,
PSource.PSpecified.DEFAULT));
byte[] decodedBytes;
decodedBytes = c.doFinal(Base64.decode(encryptedString.getBytes("UTF-8")));

return new String(decodedBytes, "UTF-8");
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Base64DecodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch ( e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//加密 Key一般是公钥
public static String encrypt(Key key, String toBeEncryptedString){

try {
Cipher c = Cipher.getInstance(RSA_CONFIGURATION);
c.init(Cipher.ENCRYPT_MODE, key, new OAEPParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256,
PSource.PSpecified.DEFAULT));
byte[] encodedBytes;
encodedBytes = c.doFinal(toBeEncryptedString.getBytes("UTF-8"));

return Base64.encode(encodedBytes);
} catch (IllegalBlockSizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch ( e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//通过Pem格式的字符串(PKCS8)生成私钥,base64是去掉头和尾的b64编码的字符串
//Pem格式私钥一般有2种规范:PKCS8和PKCS1.注意java在生成私钥时的不同
static PrivateKey generatePrivateKeyFromPKCS8(String base64)
{
byte[] privateKeyBytes;
try {
privateKeyBytes = Base64.decode(base64.getBytes("UTF-8"));
KeyFactory kf = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec ks = new PKCS8EncodedKeySpec(privateKeyBytes);
PrivateKey privateKey = kf.generatePrivate(ks);
return privateKey;
} catch (Base64DecodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeySpecException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//通过Pem格式的字符串(PKCS1)生成私钥,base64是去掉头和尾的b64编码的字符串
static PrivateKey generatePrivateKeyFromPKCS1(String base64)
{
byte[] privateKeyBytes;
try {
privateKeyBytes = Base64.decode(base64.getBytes("UTF-8"));
KeyFactory kf = KeyFactory.getInstance("RSA");
X509EncodedKeySpec ks = new X509EncodedKeySpec(privateKeyBytes);
PrivateKey privateKey = kf.generatePrivate(ks);
return privateKey;
} catch (Base64DecodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeySpecException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//通过Pem格式的字符串(PKCS1)生成公钥,base64是去掉头和尾的b64编码的字符串
//Pem格式公钥一般采用PKCS1格式
static PublicKey generatePublicKeyFromPKCS1(String base64)
{
byte[] publicKeyBytes;
try {
publicKeyBytes = Base64.decode(base64.getBytes("UTF-8"));
KeyFactory kf = KeyFactory.getInstance("RSA");
X509EncodedKeySpec ks = new X509EncodedKeySpec(publicKeyBytes);
PublicKey publicKey = kf.generatePublic(ks);
return publicKey;
} catch (Base64DecodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeySpecException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//通过molus和exponent生成公钥
//参数含义就是RSA算法里的意思
public static RSAPublicKey getPublicKey(String molus, String exponent) {
try {
BigInteger b1 = new BigInteger(molus);
BigInteger b2 = new BigInteger(exponent);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(b1, b2);
return (RSAPublicKey) keyFactory.generatePublic(keySpec);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

Python 代码
from Config import config
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

key = RSA.generate(1024)
pubkey = key.publickey().key
def Decrypt(prikey,data):
try:
cipher = PKCS1_OAEP.new(prikey, hashAlgo=SHA256)
return cipher.decrypt(data)
except:
traceback.print_exc()
return None

def Encrypt(pubkey,data):
try:
cipher = PKCS1_OAEP.new(pubkey, hashAlgo=SHA256)
return cipher.encrypt(data)
except:
traceback.print_exc()
return None


总结
主要是对RSA算法不是很熟悉,其中很多术语不懂,导致跟java里的加密模块的函数和类对应不上。
RSA算法的细节到现在也是一知半解,但真的没时间去深入学习了。

‘贰’ python字符串凯撒密码加密编写注意事项

  • Python 字符串凯撒密码加密编写的注意事项如下:塌缺

    总之,在编写 Python 字符串凯撒密码加密程序时,需要考虑到各种情况,并使用合适的数据类型和函数进行处理。

  • 确定加密规则:凯撒密码加密是通过将明文中的每个字符按照一定规则进行移位来实现的。在编写程序之前,需要确定移位的规则,例如移位的位数、移位的方向等。

  • 处理边界情况:在编写程序时,需要考虑一些边界情况,例如输入为空字符串、移位位数为0等情况。需要对这些情况进行特殊处理,以避免程序出现异常。

  • 处理大小写字母:在凯撒磨孝密码加密中,大小写字母需要分别处理。可以通过将所有字母转换为小写字母来简化处理。

  • 使用 ASCII 码进行移位:在凯撒密码加密中,可以使用 ASCII 码进行字符的移位。可以通过 ord() 函数将字符转换为 ASCII 码,通过 chr() 函数将 ASCII 码转换为字符。

  • 使用循环结瞎衫稿构进行遍历:在编写程序时,需要使用循环结构对字符串中的每个字符进行遍历,并进行移位操作。

  • 输出加密结果:在加密完成后,需要将加密结果输出。可以使用 print() 函数将加密后的字符串输出到控制台或者文件中。

‘叁’ Python编程实现加密解密读取文件

对Python加密时可能会有两种形式,一种是对Python转成的exe进行保护,另一种是直接对.py或者.pyc文件进行保护,下面将列举两种形式的保护流程。

1、对python转exe加壳

下载最新版VirboxProtector加壳工具,使用加壳工具直接对demo.exe进行加壳操作

2、对.py/.pyc加密

第一步,使用加壳工具对python安装目录下的python.exe进行加壳,将python.exe拖入到加壳工具VirboxProtector中,配置后直接点击加壳。

第二步,对.py/.pyc进行加密,使用DSProtector对.py/.pyc进行保护。

安全技术:

l虚拟机外壳:精锐5的外壳保护工具,创新性的引入了预分析和自动优化引擎,有效的解决了虚拟化保护代码时的安全性和性能平衡问题。

l碎片代码执行:利用自身成熟的外壳中的代码提取技术,抽取大量、大段代码,加密混淆后在安全环境中执行,最大程度上减少加密锁底层技术和功能的依赖,同时大量大段地移植又保证了更高的安全性。

lVirbox加密编译引擎:集编译、混淆等安全功能于一身,由于在编译阶段介入,可优化空间是普遍虚拟化技术无法比拟的,对代码、变量的混淆程度也有了根本的提升。

l反黑引擎:内置R0级核心态反黑引擎,基于黑客行为特征 的(反黑数据库)反制手段。精准打击调试、注入、内存修改等黑客行为,由被动挨打到主动防护。

加密效果:

加密之前

以pyinstall 的打包方式为例,使用pyinstxtractor.py文件对log_322.exe进行反编译,执行后会生成log_322.exe_extracted文件夹,文件夹内会生成pyc文件。

成功之后会在同目录下生成一个文件夹

‘肆’ RSA公钥和私钥的生成以及PKCS#1与PKCE#8格式的转换

首先需要电脑安装openssl,这个搜一下安装就行了。
然后运行命令行输入命令:

回车,可以看到命令行执行的文件夹多了一个rsa_private_key.pem私钥文件

然后执行生成公钥命令:

回车,可以看到命令行执败烂粗行的文件夹多了一个rsa_public_key.pem公钥文件

PKCS#1格式私钥转换成PKCS#8格式察镇私钥(一般JAVA用的都是PKCS#8格式私钥)

回车,可以看到命令行打印出了PKCS#8格式的私钥,右键复制就行了。

用记事本开打密钥文件看看
以-----BEGIN RSA PRIVATE KEY-----开头
以-----END RSA PRIVATE KEY-----结束
的就是PKCS#1格式

以-----BEGIN PRIVATE KEY-----开头
以历念-----END PRIVATE KEY-----结束
的就是PKCS#8格式

最后附上pyhton和java语言实现RSA和AES加密的文章:
python实现RSA与AES混合加密
java实现RSA与AES混合加密
python,java跨语言RSA+AES混合加密解密以及踩过的那些坑

‘伍’ 怎么用 python 模拟 js 里 JSEncrypt 模块的加密方式

PC登录新浪微博时,在客户端用js预先对用户名、密码都进行了加密,而且在POST之前会GET一组参数,这也将作为POST_DATA的一部分。这样,就不能用通常的那种简单方法来模拟POST登录(比如人人网)。
通过爬虫获取新浪微博数据,模拟登录是必不可少的。
1、在提交POST请求之前,需要GET获取四个参数(servertime,nonce,pubkey和rsakv),不是之前提到的只是获取简单的servertime,nonce,这里主要是由于js对用户名、密码加密方式改变了。
1.1 由于加密方式的改变,我们这里将使用到RSA模块,有关RSA公钥加密算法的介绍可以参考网络中的有关内容。下载并安装rsa模块:
下载:https//pypi.python.org/pypi/rsa/3.1.1
rsa模块文档地址:http//stuvel.eu/files/python-rsa-doc/index.html
根据自己的Python版本选择适合自己的rsa安装包(.egg),在win下安装需要通过命令行使用easy_install.exe(win上安装setuptool从这里下载:setuptools-0.6c11.win32-py2.6.exe 安装文件 )进行安装,例如:easy_install rsa-3.1.1-py2.6.egg,最终命令行下测试import rsa,未报错则安装成功。
1.2 获得以及查看新浪微博登录js文件
查看新浪通行证url (http//login.sina.com.cn/signup/signin.php)的源代码,其中可以找到该js的地址 http//login.sina.com.cn/js/sso/ssologin.js,不过打开后里面的内容是加密过的,可以在网上找个在线解密站点解密,查看最终用户名和密码的加密方式。
1.3 登录
登录第一步,添加自己的用户名(username),请求prelogin_url链接地址:
prelogin_url = 'http//login.sina.com.cn/sso/prelogin.php?entry=sso&callback=sinaSSOController.preloginCallBack&su=%s&rsakt=mod&client=ssologin.js(v1.4.4)' % username
使用get方法得到以下类似内容:
sinaSSOController.preloginCallBack({"retcode":0,"servertime":1362041092,"pcid":"gz-","nonce":"IRYP4N","pubkey":"","rsakv":"1330428213","exectime":1})
进而从中提取到我们想要的servertime,nonce,pubkey和rsakv。当然,pubkey和rsakv的值我们可以写死在代码中,它们是固定值。
2、之前username 经过BASE64计算:
复制代码 代码如下:
username_ = urllib.quote(username)
username = base64.encodestring(username)[:-1]
password经过三次SHA1加密,且其中加入了 servertime 和 nonce 的值来干扰。即:两次SHA1加密后,结果加上servertime和nonce的值,再SHA1算一次。
在最新的rsa加密方法中,username还是以前一样的处理;
password加密方式和原来有所不同:
2.1 先创建一个rsa公钥,公钥的两个参数新浪微博都给了固定值,不过给的都是16进制的字符串,第一个是登录第一步中的pubkey,第二个是js加密文件中的‘10001'。
这两个值需要先从16进制转换成10进制,不过也可以写死在代码里。这里就把10001直接写死为65537。代码如下:
复制代码 代码如下:
rsaPublickey = int(pubkey, 16)
key = rsa.PublicKey(rsaPublickey, 65537) #创建公钥
message = str(servertime) + '\t' + str(nonce) + '\n' + str(password) #拼接明文js加密文件中得到
passwd = rsa.encrypt(message, key) #加密
passwd = binascii.b2a_hex(passwd) #将加密信息转换为16进制。
2.2 请求通行证url:login_url =‘http//login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.4)'
需要发送的报头信息
复制代码 代码如下:
postPara = {
'entry': 'weibo',
'gateway': '1',
'from': '',
'savestate': '7',
'userticket': '1',
'ssosimplelogin': '1',
'vsnf': '1',
'vsnval': '',
'su': encodedUserName,
'service': 'miniblog',
'servertime': serverTime,
'nonce': nonce,
'pwencode': 'rsa2',
'sp': encodedPassWord,
'encoding': 'UTF-8',
'prelt': '115',
'rsakv' : rsakv,
'url': 'http//weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',
'returntype': 'META'
}
请求的内容中添加了rsakv,将pwencode的值修改为rsa2,其他跟以前一致。
将参数组织好,POST请求。检验是否登录成功,可以参考POST后得到的内容中的一句 location.replace("http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=101&reason=%B5%C7%C2%BC%C3%FB%BB%F2%C3%DC%C2%EB%B4%ED%CE%F3");
如果retcode=101则表示登录失败。登录成功后结果与之类似,不过retcode的值是0。
3、登录成功后,在body中的replace信息中的url就是我们下一步要使用的url。然后对上面的url使用GET方法来向服务器发请求,保存这次请求的Cookie信息,就是我们需要的登录Cookie了。

‘陆’ Python怎么使用已有的RSA公匙加密密码


>>>fromCrypto.HashimportMD5
>>>fromCrypto.PublicKeyimportRSA
>>>fromCryptoimportRandom
>>>rng=Random.new().read
>>>RSAkey=RSA.generate(384,rng)#Thiswilltakeawhile...
>>>hash=MD5.new(plaintext).digest()
>>>signature=RSAkey.sign(hash,rng)
>>>signature#PrintwhatanRSAsiglookslike--youdon'treallycare.
('21317313336264315'...,)
>>>RSAkey.verify(hash,signature)#Thissigwillcheckout
1
>>>RSAkey.verify(hash[:-1],signature)#Thissigwillfail
0

上面的例子需要安装pycrypto第三方库

‘柒’ Python中的如何给一个字符串加密

import rsa rsaPublickey = int(pubkey, 16) key = rsa.PublicKey(rsaPublickey, 65537) #创建公钥 message = str(servertime) + '\t' + str(nonce) + '\n' + str(password) #拼接明文js加密文件中得到 passwd = rsa.encrypt(message, key) #加密 passwd = binascii.b2a_hex(passwd) #将加密信息转换为16进制。 return passwd

‘捌’ 怎样用python调用openssl库中的rsa

#include#include#include#include#includeint main(int argc, char* argv[]){ printf("毕橘姿openssl_test begin\n"); RSA* rsa=NULL; char originstr[]="hello\n"; //这是我们需要加密的原手绝伍租始数据 //allocate RSA structure,首先需要申请一个RSA结构...

‘玖’ “青锋爱分享”Springboot+Python之RSA加解密方案(RSA深入)二

本篇并缺文章要结合上一节文章一起看。

青锋爱分享-RSA-Springboot+Python整合

码云搜索: 青锋 会有惊喜哦哦。

通过python生成的公钥私钥 格式PKCS1 。

生成pem格式如下:

私钥头(-----BEGIN RSA PRIVATE KEY-----)

私钥尾(-----END RSA PRIVATE KEY-----)

我需要将此私钥转换为DER编码的PKCS8未加密格式,以便绝戚辩与java服务器代码一起使用,特别是PKCS8EncodedKeySpec。我已经试过使用rsa和pkcs8命令的OpenSSL,如果有更简单的办法,没有特别需要使仔迅用openssl。

RSA私钥格式PKCS1和PKCS8相互转换

RSA公钥格式PKCS1和PKCS8相互转换

以下转换基于openssl命令的操作;

执行:openssl genrsa -out private.pem 1024

-----BEGIN RSA PRIVATE KEY-----

MIICXQIBAAKBgQDlLm5++/wwSfq5KfY

H8q1AO/

Uo4OMcmoSz3IAp/7//ewIDAQAB

AoGBAJkMdvF+i9Kzc6YqMC0rfQJ3Zs+vFOtsbmQVAMnQ8JWBCJ1O8d/c60wRQgyb

lFCyO7VXOmoIJqX/Jr2aER8bFtG+

lOdOay7TkE45X/Wc7K9iZs2uuB7sylIvK/HVxxit6FGePa4RAkEA9e+VoAbxBv78

HyxRcStW+

n0UxgT55MPXWGdMRXUUOCNnMilaw/

HvK0IW3zpOgf/+/W565ROI/fjkR1qCD

rZJeHgqMWDlIUuR9+BdBAkAI8+

puQxMonRWTN+

-----END RSA PRIVATE KEY-----


执行:openssl pkcs8 -topk8 -inform PEM -in private.pem -outform pem -nocrypt -out pkcs8.pem


-----BEGIN PRIVATE KEY-----

+n

yHOOfV+XbBPsC7aWblIS3Pqv7/DBJ+/T

uaDSVA4K8Tmx22YC8PZ7HfAJ5/yVaaB2HmpSjg4xyahLPcgCn/v8WcxqDUh6VJ92

/

Q3fic/

+

nt0qVQJAOmMZ67caK+YHZ0M3Rp3adQgF+

//6OHlRQIElgect4wb

CbtfXWu9AfXNbTlXH39bnrlE4j9+

Yt1Zx5df0+

HLU0VEwSQa7rvmY=

-----END PRIVATE KEY-----


执行:openssl rsa -in pkcs8.pem -out pkcs1.pem


-----BEGIN RSA PRIVATE KEY-----

MIICXQIBAAKBgQDlLm5++/wwSfq5KfY

H8q1AO/

Uo4OMcmoSz3IAp/7//ewIDAQAB

AoGBAJkMdvF+i9Kzc6YqMC0rfQJ3Zs+vFOtsbmQVAMnQ8JWBCJ1O8d/c60wRQgyb

lFCyO7VXOmoIJqX/Jr2aER8bFtG+

lOdOay7TkE45X/Wc7K9iZs2uuB7sylIvK/HVxxit6FGePa4RAkEA9e+VoAbxBv78

HyxRcStW+

n0UxgT55MPXWGdMRXUUOCNnMilaw/

HvK0IW3zpOgf/+/W565ROI/fjkR1qCD

rZJeHgqMWDlIUuR9+BdBAkAI8+

puQxMonRWTN+

-----END RSA PRIVATE KEY-----


可以看出结果和1是一致的;

执行:openssl rsa -in private.pem -pubout -out public.pem


-----BEGIN PUBLIC KEY-----

+Kosybacfp8hzjn1fl2wT

7Au2lm5SEtz6r+/wwSfq5KfYH8q1AO/

/7/FnMag1IelSfdronPBDxazp6

NUmQZITsYK6CsEl/ewIDAQAB

-----END PUBLIC KEY-----


5. 从pkcs8私钥中生成pkcs8公钥
执行:openssl rsa -in pkcs8.pem -pubout -out public_pkcs8.pem


-----BEGIN PUBLIC KEY-----

+Kosybacfp8hzjn1fl2wT

7Au2lm5SEtz6r+/wwSfq5KfYH8q1AO/

/7/FnMag1IelSfdronPBDxazp6

NUmQZITsYK6CsEl/ewIDAQAB

-----END PUBLIC KEY-----


可以看出结果和4是一样的;

执行:openssl rsa -pubin -in public.pem -RSAPublicKey_out


-----BEGIN RSA PUBLIC KEY-----

MIGJAoGBAOUubn4qizJtpx+nyHOOfV+XbBPsC7aWblIS3Pqv7/DBJ+rkp9gfyrUA

78L3YjASmmU1uupiY5dC7o/TuaDSVA4K8Tmx22YC8PZ7HfAJ5/yVaaB2HmpSjg4x

yahLPcgCn/=

-----END RSA PUBLIC KEY-----



openssl rsa -pubin -in public_pkcs8.pem -RSAPublicKey_out


-----BEGIN RSA PUBLIC KEY-----

MIGJAoGBAOUubn4qizJtpx+nyHOOfV+XbBPsC7aWblIS3Pqv7/DBJ+rkp9gfyrUA

78L3YjASmmU1uupiY5dC7o/TuaDSVA4K8Tmx22YC8PZ7HfAJ5/yVaaB2HmpSjg4x

yahLPcgCn/=

-----END RSA PUBLIC KEY-----


可以看出转换的结果是一致的;

执行:openssl rsa -RSAPublicKey_in -in pub_pkcs1.pem -pubout


-----BEGIN PUBLIC KEY-----

+Kosybacfp8hzjn1fl2wT

7Au2lm5SEtz6r+/wwSfq5KfYH8q1AO/

/7/FnMag1IelSfdronPBDxazp6

NUmQZITsYK6CsEl/ewIDAQAB

-----END PUBLIC KEY-----


可以看到和上面4,5的结果是一致的;

最后一点:
iOS上用的是pkcs8格式的公钥
openssl用的是pkcs1格式的公钥
知道私钥以后是可以导出公钥的,所以私钥一定要保证安全
知道公钥不可以导出私钥


解决方案针对是window电脑。

配置:SystemRoot/ System32 环境变量。

1、邮件我的电脑-选择下【属性】。

2、选择高级系统设置

3、选择【高级】-【环境变量】

4、双击打开path,进行编辑

5、 接着我们在这名字后面加【;System32】就可以了。

安装 Win64 OpenSSL,地址: http://slproweb.com/procts/Win32OpenSSL.html

下载后根据提示一步一步安装,安装完成后:

双击start.bat 启动

‘拾’ python rsa模块---生成公钥和私钥的方法

https://blog.csdn.net/six66hao/article/details/81814576
https://blog.csdn.net/whatday/article/details/97617461
https://blog.csdn.net/xiongzaiabc/article/details/88400748
https://blog.csdn.net/zhao3587717/article/details/83111082/

一.
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)
对称加密算法大家共渣岁用一个密钥

数字签名: 就是为了证明该信件是确定的人发出的,而不是黑客冒充发出的
eg:
1.鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。

二.用RSA库可以生成公钥和私改梁盯钥
到时候把公钥给前端,后端保存公钥和私钥

三.在用户注册/登入时,输入密码后前端会用JS对密码进行加密传送到后端
一般现在对于密码的加密解密都核和用RSA进行

热点内容
外网访问黑群晖 发布:2025-02-08 05:45:59 浏览:559
中央存储服务器公司地址 发布:2025-02-08 05:38:48 浏览:821
服务器如何查询表空间的文件路径 发布:2025-02-08 05:38:00 浏览:162
宏基4741g哪个配置好 发布:2025-02-08 05:37:56 浏览:810
混合料运输车的配置是如何计算的 发布:2025-02-08 05:31:35 浏览:293
android红包插件 发布:2025-02-08 05:31:34 浏览:365
ea服务器怎么连接 发布:2025-02-08 05:16:45 浏览:463
更加密更改 发布:2025-02-08 05:15:20 浏览:786
仓储资源配置都需要开展哪些任务 发布:2025-02-08 05:13:51 浏览:676
探针数据库 发布:2025-02-08 05:13:35 浏览:80