前端js,后台python实现RSA非对称加密
- 先熟悉使用 在后台使用RSA实现秘钥生产,加密,解密;
# -*- encoding:utf-8 -*-
import base64
from Crypto import Random
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
from Crypto.PublicKey import RSA # 伪随机数生成器
random_generator = Random.new().read
# rsa算法生成实例
rsa = RSA.generate(1024, random_generator)
# master的秘钥对的生成
private_pem = rsa.exportKey() #生产私钥私钥并放到文件里
with open('master-private.pem', 'w') as f:
f.write(private_pem)
public_pem = rsa.publickey().exportKey()
with open('master-public.pem', 'w') as f:
f.write(public_pem) #用公钥加密
#被加密的数据
message = 'I_LOVE_YAYA'
#打开公钥文件
with open('master-public.pem') as f:
key = f.read()
rsakey = RSA.importKey(key)
cipher = Cipher_pkcs1_v1_5.new(rsakey)
#加密时使用base64加密
cipher_text = base64.b64encode(cipher.encrypt(message))
# cipher_text = cipher.encrypt(message)
print cipher_text #用私钥解密
#打开秘钥文件
with open('master-private.pem') as f:
key = f.read()
rsakey = RSA.importKey(key)
cipher = Cipher_pkcs1_v1_5.new(rsakey)
# text = cipher.decrypt(cipher_text, random_generator)
#使用base64解密,(在前端js加密时自动是base64加密)
text = cipher.decrypt(base64.b64decode(cipher_text), random_generator)
print text - 前后台共同完成RSA非对称加密:大致思路为 first:后台生产公钥私钥,next:后台把公钥给前台,than:前台用公钥加密并传送给后台,finally:后台使用秘钥解密。
- first:后台生产公钥私钥
create_password.py文件
# -*- encoding:utf-8 -*-
from Crypto.PublicKey import RSA
from flask import current_app
from Crypto import Random
# rsa算法生成实例
RANDOM_GENERATOR=Random.new().read
if __name__=='__main__':
rsa = RSA.generate(1024, RANDOM_GENERATOR)
# master的秘钥对的生成
PRIVATE_PEM = rsa.exportKey()
with open('master-private.pem', 'w') as f:
f.write(PRIVATE_PEM)
print PRIVATE_PEM
PUBLIC_PEM = rsa.publickey().exportKey()
print PUBLIC_PEM
with open('master-public.pem', 'w') as f:
f.write(PUBLIC_PEM) - next:后台把公钥给前台 --打开master-public.pem此文件,复制里面内容到前端(具体粘贴位置在下一步)
- than:前台用公钥加密并传送给后台
#导入js,如果需要base64文件,一定要在导入加密js文件之前导入,否则会出现加密结果为 false;
#如果报 typeerror-base64-not-a-constructor;使用http://blog.csdn.net/ziwoods/article/details/58595840解决方法
<script src="js/plugin/base64.js"></script>
<script src="js/plugin/jsencrypt.min.js" type="text/javascript"></script> //获取密码
var password = $("#pass").val(); //获取公钥
var PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCogdzMsG4S20msz32M+a1GNg2Tw4UIEGDD/dfKkoZgRtEaJtHzCXgmpP3eECHCJsK0zt0GYYxGQnfbq5mBd37xVnAlKWjVpjGQHZ+fjwn82+mRUzjmFGLs3ax79zaXJZnHTN63/yS2Rua3QY/T5Z5TLpn2YOmOn09U22eA3vdfZwIDAQAB-----END PUBLIC KEY-----";
//rsa加密
var encrypt = new JSEncrypt();
encrypt.setPublicKey(PUBLIC_KEY);
password = encrypt.encrypt(password);//加密后的字符串- finally:后台使用秘钥解密
views.py文件
#获取密码
password = request.values.get('password')
with open('carrier/master-private.pem') as f:
key = f.read()
rsakey = RSA.importKey(key)
cipher = Cipher_pkcs1_v1_5.new(rsakey)
password = cipher.decrypt(base64.b64decode(password), RANDOM_GENERATOR)
#如果返回的password类型不是str,说明秘钥公钥不一致,或者程序错误
if str(type(password))!="<type 'str'>":
return 'fail'
#结果应该为I_LOVE_YAYA
print password本功能模块中前端RSA加密过程中没有使用OPEN_SSL生成models方式进行加密(运维部署时简洁方便,并且用那种方式,传输的为16进制数据);并且前端加密数据为base64位传输到后台;后台需要导入的包等在最上面1中
前端js,后台python实现RSA非对称加密的更多相关文章
- python使用rsa非对称加密
1.安装rsa 支持python 2.7 或者 python 3.5 以上版本 使用豆瓣pypi源来安装rsa pip install -i https://pypi.douban.com/simpl ...
- javascript版前端页面RSA非对称加密解密
最近由于项目需要做一个url传参,并在页面显示参数内容的需求,这样就会遇到一个url地址可能会被假冒, 并传递非法内容显示在页面的尴尬情况 比如xxx.shtml?server=xxx是坏人& ...
- 前后端数据加密传输 RSA非对称加密
任务需求:要求登陆时将密码加密之后再进行传输到后端. 经过半天查询摸索折腾,于是有了如下成果: 加密方式:RSA非对称加密.实现方式:公钥加密,私钥解密.研究进度:javascript与java端皆已 ...
- Atitit RSA非对称加密原理与解决方案
Atitit RSA非对称加密原理与解决方案 1.1. 一.一点历史 1 1.2. 八.加密和解密 2 1.3. 二.基于RSA的消息传递机制 3 1.4. 基于rsa的授权验证机器码 4 1.5. ...
- CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互
(以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 voi ...
- RSA非对称加密Java实现
原文 加密基础方法类 import java.security.MessageDigest; import sun.misc.BASE64Decoder; import sun.misc.BASE64 ...
- php RSA非对称加密 的实现
基本概念 加密的意义 加密的意义在于数据的传输过程中,即使被第三方获取到传输的数据,第三方也不能获取到数据的具体含义. 加密方式分为对称加密和非对称加密 什么是对称加密? 对称加密只使用一个秘钥,加密 ...
- ssh rsa 非对称加密 基本原理
我们常用的ssh 免密登陆是用了 非对称加密的rsa算法(最为常用),与对称加密的相比会慢一些,但是更安全.秘钥长度超过768位无法破解. 默认长度是2048位(无法破解,非常安全) ssh-keyg ...
- RSA 非对称加密,私钥转码为pkcs8 错误总结
RSA 非对称加密,私钥转码为pkcs8 错误总结 最近在和某上市公司对接金融方面的业务时,关于RSA对接过程中遇到了一个坑,特来分享下解决方案. 该上市公司简称为A公司,我们简称为B公司.A-B两家 ...
随机推荐
- 计算机改名引发的ORA
近期上班时,由于开机时老是提示" 局域网出现计算机重名冲突",于是把计算机名字给改了,从PC2010081312zeo改为了CXBIKKKKKKK,结果第二天来的时候,用PL/SQ ...
- IO (二)
1 字符流的缓冲区 缓冲区的出现提高了对数据的读写效率. 对应的类: BufferedWriter BufferedReader 缓冲区要结合流才能使用. 在流的基础上对流的功能进行了增强. 2 Bu ...
- 【转】python入门指引
http://matrix.42qu.com/10757179 前言 其实我也不知道python怎么入门,由我来写这个真的不是很合适.我学python是直接找了dive into python来看.然 ...
- 【转】新手该如何学python怎么学好python?
1)学好python的第一步,就是马上到www.python.org网站上下载一个python版本.我建议初学者,不要下载具有IDE功能的集成开发环境,比如Eclipse插件等. 2) 下载完毕后,就 ...
- 【转】rinex
RINEX(Receiver INdependent Exchange)格式是与接收机无关的数据交换格式,该格式采用文本文件存储数据,数据记录格式与接收机的制造厂商和具体型号无关.RINEX ...
- 使用postMessage实现跨域 解决'Failed to execute 'postMessage' on 'DOMWindow''
使用iframe+postMessage解决跨域问题,首先来过一遍其中的原理咯 原理: 发送方使用postMessage方法向接收方推送消息,第一个参数为推送的内容,第二个参数是允许被访问的域名: 接 ...
- 《NET 设计规范》第 2 章 框架设计基础
<NET 设计规范>第 2 章 框架设计基础 要设计功能强大又易于使用的框架. 要理解广大开发人员并有针对性地为他们设计框架. 要理解各种编程语言,并为他们设计框架. 2.1 渐进框架 2 ...
- vhost-user 简介
什么是 vhost-user 在 vhost 的方案中,由于 vhost 实现在内核中,guest 与 vhost 的通信,相较于原生的 virtio 方式性能上有了一定程度的提升,从 guest 到 ...
- iOS-RAC从新手开始
什么是RAC? 其实RAC就是一个简化代码的第三方库ReactiveCocoa,直接用Cocoapods添加到项目里就可以, podfile 文件添加 pod 'ReactiveCocoa',然后终端 ...
- spring中ref属性与<ref/>标签
在bean的内部引用另一个bean对象: 使用ref标签对其进行引用: <ref bean="viewResolver2"/> <bean id="vi ...