RSA:js加密,php/python解密实例
RSA:一种高强度的非对称加密算法,其密钥以”对”为单位出现,分为“公匙”(public key)与“私匙”(private key),一匙加密一匙解密。
传说至今尚未有人能破解超过1024位以上的RSA,安全性无疑是非常高的。不过也由于是采用非对称加密,加解密耗费时间比起DES等对称算法要长很多。
一般应用场景:
需要高度加密的数据;//私匙加密,公匙解密
确认身份;//公匙加密,私匙解密
下面是rsa加密解密的实例,有需要的可以看看
生成公匙与私钥
打开万能的终端:
# 创建一个文件夹用来放证书 mkdir rsa-cert && cd rsa-cert #进入openssl命令行 openssl #创建一个私钥 genrsa -out rsa_private_key.pem 1024 #如果需要PKCS8格式可以用以下命令生成 pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out rsa_private_key_pkcs8.pem #输出公钥 rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem #最后退出openssl exit #这时你的目录下应该有这三个文件,可以直接以文本方式打开查看 ls # rsa_private_key.pem rsa_private_key_pkcs8.pem rsa_public_key.pem
JS加密
像我这种低级玩家,自然是用大牛们的轮子:jsencrypt.js
项目GitHub主页:https://github.com/travist/jsencrypt
使用jsencrypt进行加密(其实项目主页上就有很详细的文档)
var public_key = "公匙文本" var jsencrypt = new JSEncrypt(); jsencrypt.setPublicKey(public_key); var 加密后的字符串=jsencrypt.encrypt(data);
后端解密
RSA-PHP解密
<?php //需要开启openssl扩展 $RSA_PRIVATE='';//配对私匙 $ctxt64_pub='';//客户端传来的加密字符串 $text = RAS_decode($ctxt64_pub); function RAS_decode($data){ $private_key = openssl_pkey_get_private(RSA_PRIVATE); if (!$private_key) { //私匙不可用 return false; } $return_de = openssl_private_decrypt(base64_decode($data), $decrypted, $private_key); if (!$return_de) { //解密失败,请检查是否为配对私匙 return false; } return $return_de; }
照搬:https://blog.csdn.net/dyushuo6230/article/details/80413097
RSA-Python解密
依赖m2cryptopip install m2crypto # 或 apt install python-m2crypto
#!/usr/bin/env python #coding=utf-8 from M2Crypto import RSA def RAS_decode(msg, prikey_file): rsa_pri = RSA.load_key(prikey_file) ctxt_pri = msg.decode("base64") return rsa_pri.private_decrypt(ctxt_pri, RSA.pkcs1_padding) prikey_file = ''#私钥路径 ctxt64_pub=''#ctxt64_pub text=RAS_decode(ctxt64,prikey_file)