学习
实践
活动
专区
工具
TVP
写文章
专栏首页Rgc前端js,后台python实现RSA非对称加密

前端js,后台python实现RSA非对称加密

  1. 先熟悉使用 在后台使用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
  1. 前后台共同完成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:后台使用秘钥解密 本功能模块中前端RSA加密过程中没有使用OPEN_SSL生成models方式进行加密(运维部署时简洁方便,并且用那种方式,传输的为16进制数据);并且前端加密数据为base64位传输到后台;后台需要导入的包等在最上面1中
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
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:http://www.cnblogs.com/rgcLOVEyaya复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • OpenSSL - RSA非对称加密实现

    Aichen
  • [Linux] 使用openssl实现RSA非对称加密

    参数:genrsa 生成密钥 -out 输出到文件 rsa_private_key.pem 文件名 1024 长度

    唯一Chat
  • python----RSA非对称加密算法

    最近在搞项目的接口持续性自动化测试中接触到很多加密相关的数据,很多项目都会用到非对称加密算法来保证前端和服务器交互的数据安全。

    py3study
  • python实现rsa加密

    Before encrypted: sanxi Now is better than never.

    py3study
  • 基于JAVA的RSA非对称加密算法简单实现

      RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。

    CodeWwang
  • RSA实现JS前端加密与PHP后端解密功能示例

    本文实例讲述了RSA实现JS前端加密与PHP后端解密功能。分享给大家供大家参考,具体如下:

    砸漏
  • 非对称加密的RSA算法如何通过golang来实现?

    上一篇文章我们讲了golang实现AES的方式,这里我们来讲一下RSA算法如何通过golang实现。需要注意的是rsa本身不支持大文件的加密,我们需要分段切割进...

    公众号-利志分享
  • python实现RSA加密数字

    通过 (num ** e) % N 可以实现加密,而 (num ** d) % N 则实现解密

    DearXuan
  • python3 rsa非对称加密与签名校验

    本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/article/python-rsa/

    羽翰尘
  • RSA加密算法Python实现

    RSA加密算法是目前使用最广泛的加密方式,具体流程见RSA加密算法 之前想过用C语言实现,但是由于C语言对整型的位宽有要求,RSA加密算法中需要使用的数字大小...

    全栈程序员站长
  • Silverlight中非对称加密及数字签名RSA算法的实现

    RSA算法是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。它的安全性是基于大整数素因子分解的困难性,而大整数因子分解问题是数学上的著...

    葡萄城控件
  • 【接口测试】JMeter调用JS文件实现RSA加密

    最近遇到的一个接口传参使用jsencrypt进行RSA加密,于是我查阅资料发现JMeter的JSR233 预处理程序可以调用js文件。

    用户9913368
  • 非对称性加密算法——RSA算法原理及C++实现

    最近想模仿一下qq,做一个通信软件,这是qq的登录界面,当我们选择记住密码后,每次运行qq,就会显示已保存的密码,无论是否联网,显然这个密码是保存在本地的,...

    花狗Fdog
  • 使用Python实现RSA加密算法及详解RSA算法「建议收藏」

    代码已经放上github : https://github.com/chroje/RSA

    全栈程序员站长
  • Python crypto模块实现RSA和AES加密解密

    RSA加密算法是一种非对称加密算法。RSA 是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leo...

    Python碎片公众号
  • 前端(JS)与后端(PHP) 通过 RSA 实现加解密

    句小芒
  • 个人总结 – JS逆向解析[通俗易懂]

    其中this.exponent是RSA加密偏移量 ,数值一般在HTML文件里面,全局搜索,其value值就是

    全栈程序员站长
  • encyption&decyption

    用户1733354

扫码关注腾讯云开发者

领取腾讯云代金券