非对称加密提交表单到PHP

首先用openssl工具生成一对RSA非对称密钥

附录:生成方法

RSA密钥生成命令

1、生成RSA私钥

openssl>openssl genrsa -out rsa_private_key.pem 1024

  得到exponent: 10001

2、生成modulus:

openssl>openssl rsa -in rsa_private_key.pem -noout -modulus 

3、生成RSA公钥

openssl>openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

4、将RSA私钥转换成PKCS8格式(==========java使用===========)

openssl>openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

注意:“>”符号后面的才是需要输入的命令。

若命令不起作用请先执行下面命令:

openssl genrsa -out rsa_1024_priv.pem 1024
openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem

然后在前端引入jsencrypt库,用于非对称加密,再绑定submit的onclick事件,对表单需加密数据进行加密处理

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="/controller.php" id="form" method="post">username:<input type="text" name="username">password:<input type="password" name="password"><input type="submit">
</form>
</body>
<script src="http://cdn.bootcss.com/jsencrypt/2.3.0/jsencrypt.min.js"></script>
<script>var form_ele = document.getElementById('form');var password_ele = form_ele.querySelector('[name=password]');var submit_ele = form_ele.querySelector('[type=submit]');submit_ele.onclick = function (e) {var password = password_ele.value;var encrypt = new JSEncrypt();var publickey = '-----BEGIN PUBLIC KEY-----\MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7xzfMsVgFc/q1wUQ7vAUU7CD8\W5eq0PnJb0Hv7Py1GQ+qYaqiasOqOr6T2FizbzSbXd+ZirEiZVdtFX9nKK4OlVHR\zDSGulioUESLUuNQau0BeWFsEwxCMIMkAMM1fI5zDMp1PvxULdC5hFTLDXNCf5DY\Yl4Xkc1LNsa4XYQV1QIDAQAB\-----END PUBLIC KEY-----';encrypt.setPublicKey(publickey);password = encrypt.encrypt(password);password_ele.value = password;form_ele.submit();return false;}
</script>
</html>

然后就可以在后端PHP中通过openssl_private_decrypt方法解析传输过来的加密数据了

<?php//下面是错误示范  不要为了整齐把私钥格式搞错
/*
$privatekey = '-----BEGIN RSA PRIVATE KEY-----MIICXAIBAAKBgQC7xzfMsVgFc/q1wUQ7vAUU7CD8W5eq0PnJb0Hv7Py1GQ+qYaqiasOqOr6T2FizbzSbXd+ZirEiZVdtFX9nKK4OlVHRzDSGulioUESLUuNQau0BeWFsEwxCMIMkAMM1fI5zDMp1PvxULdC5hFTLDXNCf5DYYl4Xkc1LNsa4XYQV1QIDAQABAoGARRGwGqCYydixPS2LlZVBIUMBlxFxpikb19YOoNvA0DQZqQgnpXoz4medNfB8H/Qlm4hZ+LYlFYvFLqCbriwuaRl3utzULP6XxVjI8NlLbbg+sXquDAJVtiIFVpBsVNbvBFFMG9kwM0UnfRTcLDVu5kPH8PSpkuEF6BKRS2oyXcECQQDgteyUuDvMejIRsYHf+GDOhtY6Ncy25cEgk07xSNz84uRhMBe2lVI9rTEmE2lSVSBBfsdKwums2VOKbj8uJQYJAkEA1ezLEKCdOWN8VZLe8jQIGoPX7kYqIo1BiaUa+8eER/tMZlCsXDPQwRBfRBiiDGO9KAWR8i0vRMGTYAnol31kbQJAN1DxdUbJCbQHAU4GH6FgC1csA1ZdF6UFXsSEiWcbZ3FfMQGKxNqLTT2GPM5IfgkQkK7p1mCW74LsSsaK7QwWKQJAHJ+neB0VjHU8ULLrM9s0bl/Px6kJwD/IUiOOXbwPfhYo3dPTjC6+suZ+6LynCiNaTv2XzqCvH3MLRiFtRr/XbQJBANDOugkjgfTQKt2yHWEPMp+pNeRyPIycuHQq+ejoTp+Gy0SXaEGYTNdLpZ4D1mCVea/4qnhlnW8ir7KEC6ecI0I=-----END RSA PRIVATE KEY-----';
*/
//下面是正确示范
$privatekey = '-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC7xzfMsVgFc/q1wUQ7vAUU7CD8W5eq0PnJb0Hv7Py1GQ+qYaqi
asOqOr6T2FizbzSbXd+ZirEiZVdtFX9nKK4OlVHRzDSGulioUESLUuNQau0BeWFs
EwxCMIMkAMM1fI5zDMp1PvxULdC5hFTLDXNCf5DYYl4Xkc1LNsa4XYQV1QIDAQAB
AoGARRGwGqCYydixPS2LlZVBIUMBlxFxpikb19YOoNvA0DQZqQgnpXoz4medNfB8
H/Qlm4hZ+LYlFYvFLqCbriwuaRl3utzULP6XxVjI8NlLbbg+sXquDAJVtiIFVpBs
VNbvBFFMG9kwM0UnfRTcLDVu5kPH8PSpkuEF6BKRS2oyXcECQQDgteyUuDvMejIR
sYHf+GDOhtY6Ncy25cEgk07xSNz84uRhMBe2lVI9rTEmE2lSVSBBfsdKwums2VOK
bj8uJQYJAkEA1ezLEKCdOWN8VZLe8jQIGoPX7kYqIo1BiaUa+8eER/tMZlCsXDPQ
wRBfRBiiDGO9KAWR8i0vRMGTYAnol31kbQJAN1DxdUbJCbQHAU4GH6FgC1csA1Zd
F6UFXsSEiWcbZ3FfMQGKxNqLTT2GPM5IfgkQkK7p1mCW74LsSsaK7QwWKQJAHJ+n
eB0VjHU8ULLrM9s0bl/Px6kJwD/IUiOOXbwPfhYo3dPTjC6+suZ+6LynCiNaTv2X
zqCvH3MLRiFtRr/XbQJBANDOugkjgfTQKt2yHWEPMp+pNeRyPIycuHQq+ejoTp+G
y0SXaEGYTNdLpZ4D1mCVea/4qnhlnW8ir7KEC6ecI0I=
-----END RSA PRIVATE KEY-----';if (openssl_private_decrypt(base64_decode($_POST['password']), $decrypted, $privatekey)) {echo $decrypted . "\n";
} else {echo 'error';
}

 后话:

如果报 message too long for rsa; 说明你加密的字符串过长。
两种解决方案:

1,将数据(一般是json串)用对称加密成短的字符串。然后再用rsa加密;

2,将数据(json串)以100字符分割开来,分别将分割的字符串加密。后台解密组合数据。

方法2不适合长字符串,各自取所需的吧。

rsa非对称加密(js+php)---事例2(已被采用)相关推荐

  1. Atitit RSA非对称加密原理与解决方案

    Atitit RSA非对称加密原理与解决方案 1.1. 一.一点历史 1 1.2. 八.加密和解密 2 1.3. 二.基于RSA的消息传递机制  3 1.4. 基于rsa的授权验证机器码 4 1.5. ...

  2. 前后端数据加密传输 RSA非对称加密

    任务需求:要求登陆时将密码加密之后再进行传输到后端. 经过半天查询摸索折腾,于是有了如下成果: 加密方式:RSA非对称加密. 实现方式:公钥加密,私钥解密. 研究进度:javascript与java端 ...

  3. 微信小程序RSA非对称加密。

    因公司做的产品为金融项目,所以对数据安全性有很高要求,因为项目中的数据都会通过3DES 对称加密,和RSA非对称加密进行数据传输. 在这里先简单介绍一下什么是对称加密和非对称加密 对称加密:对称加密采 ...

  4. java RSA非对称加密详解

    简介 RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年首次公布,当 ...

  5. Python代码实现MD5、AES对称加密和RSA非对称加密以及OpenSSl实践

    1.MD5加密算法 1.1 MD5加密的特点 不可逆运算 对不同的数据加密的结果是定长的32位和16位字符(不管文件多大都一样) 对相同的数据加密,得到的结果是一样的(也就是复制). 抗修改性 :信息 ...

  6. 基于Python语言、RSA非对称加密的IRC聊天室客户端

    源码地址: (55条消息) 基于Python语言.RSA非对称加密的IRC聊天室客户端源码与应用程序-Python文档类资源-CSDN文库 1 研究背景和现状 IRC是Internet Relay C ...

  7. JSON 接口如何实现 RSA 非对称加密与签名

    代码地址如下: http://www.demodashi.com/demo/14000.html 一.概述 1. 数字签名的作用:保证数据完整性,机密性和发送方角色的不可抵赖性,加密与签字结合时,两套 ...

  8. CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互

    (以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 [cp ...

  9. php利用openssl实现RSA非对称加密签名

    来源:http://www.webiji.com/archives/412 php利用openssl实现RSA非对称加密签名 1. 先用php生成一对公钥和私钥 $res = openssl_pkey ...

最新文章

  1. 「镁客早报」任正非称对苹果等对手出售5G芯片持开放态度;马斯克称未来12个月内将生产超过50万辆车...
  2. learning scala read from file
  3. [云炬创业基础笔记]第十一章创业计划书测试14
  4. ExtJS中给Tree节点加click事件
  5. 搜索引擎学习(四)中文分词器
  6. Python进阶(四)Python中的异常
  7. 我的博客css得到别人的认可
  8. 【深度学习】简单地利用keras做车标识别
  9. MATLAB信号与系统实验(一)
  10. 大数据---Hadoop的各种版本
  11. MWORKS应用案例 | 基于Modelica的射流管式电液伺服阀的建模仿真
  12. SketchUp:SketchUp草图大师经典案例之利用跟随路径工具工具设计椭球图文教程
  13. selenium 实战之 A级纳税人信息
  14. matlab胡良剑第五章,matlab数学实验第一至第四章答案(胡良剑)
  15. Ubuntu神奇地变成了只读文件系统的错误--修复方法
  16. 使用微信wx-open-launch-app标签实现微信网页打开App记录
  17. 前端JavaScript DOM BOM 自学复盘 D1(DOM-获取DOM元素、修改HTML标签/表单/css样式属性、定时器-间歇函数)
  18. 计算机网络第一章学习通题目及答案
  19. ThinkPad T400重装win7系统
  20. 2023年Python数据分析有什么好的课程推荐吗?

热门文章

  1. 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)
  2. suricata匹配从入门到精通(一)----suricata安装配置及使用
  3. suricata 初始化做的那些事儿
  4. 纯HTML实现关闭按钮
  5. [Docker] docker network 常见模式及常用命令介绍
  6. 简单、安全的混合远程办公解决方案丨Parallels RAS简介
  7. 计算机怎么进行排名,电脑排序方式怎么自由排序
  8. JAVA个人通讯录的实现
  9. [矩阵树定理 容斥 meet in middle] Topcoder SRM 551 DIV1 Hard. SweetFruits
  10. 又一家!天数智芯天垓100 产品卡与龙蜥操作系统完成产品兼容互认证