通用RSA加密 - PHP+Java+Javascript加密解密
php端生成 公钥私钥
1、openssl genrsa -out rsa_private_key.pem 1024 私钥
2、openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 公钥
3、openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt 将RSA私钥转换成PKCS8格式(java)

PHP端加密解密
class Index
{ public function index(){
// 私钥解密
$private_key = "-----BEGIN RSA PRIVATE KEY-----
ERCCWwIBAAKBgQC4zGR6jo8bcR19eKxJ2IpOxTjwMVya5Egh2ZTf/lXJmVsoOBwO
ul/g0+fPI2aQ58mICjnxc0vpYz1M5INmcVIgJdOksN13CpTGpTLunD2xcHrE25Cx
5elNbQCPFICRQcnE1zqn8GPySm4EQO2UiHjoTalwfmhfYlS3cNaAcXrZfwIDAQAB
AoGACcmRfMg2Hh70j+OnRFX6pUdex6HlpLJ4e4p5jw96Xa4InO2z1rfaQh8XBOp8
ESqlitX30ajomVjPM1Za+z7/OWuMYV/KehnX9SCKlC9uU9a2zu/oMN+hf2LiqlOy
KWmJRzn1UduDKq6pejac8mltZhFduTFnyxOMtkW8/Qf1TvkCQQDqolU686aC5pQU
cKsOi23rI+5K4s+T4SAum1vKFvsT9ebLiqru+EauZhHDOUH8plQIuV4tiEFEhzjq
XVnwcpolAkEAyaBQ2Wsc/T1uDFGDpRy+nPdtHjQh6NTXvBF5VI3weeQJeCOl6hzQ
IV3OWEyfXsXbYq0PzHz077jbM2g0OeiJ0wJAPDYgTRqNlnX5di1bmEXrlTYJRqph
vn89NPilW3z+PacS7RTOvLh12vdSg5jD+EPuuLZpFqIqrZ1N28bM98lRCQJAKgs2
EMBXQS9oHUV6MBn4XX7y0BOK5qRLgDoclNcsSB6XIug8Fr9/XxXSi3Me4IJdpwvz
eW6tHLftbaDTEyg8ZQJAPy9IuyA8WsHwBtybIxhCppJPGlMojoPyRZ5JWqZskzUB
NQuu5zy2yio29hIILEJ6h46qnBdmEjd/C/fZ9oYjJw==
-----END RSA PRIVATE KEY-----"; // 公钥加密
$public_key = "-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4zGR6jo8bcR19eKxJ2IpOxTjw
MVya5Egh2ZTf/lXJmVsoOBwOul/g0+fPI2aQ58mICjnxc0vpYz1M5INmcVIgJdOk
sN13CpTGpTLunD2xcHrE25Cx5elNbQCPFICRQcnE1zqn8GPySm4EQO2UiHjoTalw
fmhfYlS3cNaAcXrZfwIDAQAB
-----END PUBLIC KEY-----"; // ====Java 私钥===
// -----BEGIN PRIVATE KEY-----
//MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALjMZHqOjxtxHX14
//rEnYik7FOPAxXJrkSCHZlN/+VcmZWyg4HA66X+DT588jZpDnyYgKOfFzS+ljPUzk
//g2ZxUiAl06Sw3XcKlMalMu6cPbFwesTbkLHl6U1tAI8UgJFBycTXOqfwY/JKbgRA
//7ZSIeOhNqXB+aF9iVLdw1oBxetl/AgMBAAECgYAJyZF8yDYeHvSP46dEVfqlR17H
//oeWksnh7inmPD3pdrgic7bPWt9pCHxcE6nwRKqWK1ffRqOiZWM8zVlr7Pv85a4xh
//X8p6Gdf1IIqUL25T1rbO7+gw36F/YuKqU7IpaYlHOfVR24Mqrql6NpzyaW1mEV25
//MWfLE4y2Rbz9B/VO+QJBAOqiVTrzpoLmlBRwqw6Lbesj7kriz5PhIC6bW8oW+xP1
//5suKqu74Rq5mEcM5QfymVAi5Xi2IQUSHOOpdWfBymiUCQQDJoFDZaxz9PW4MUYOl
//HL6c920eNCHo1Ne8EXlUjfB55Al4I6XqHNAhXc5YTJ9exdtirQ/MfPTvuNszaDQ5
//6InTAkA8NiBNGo2Wdfl2LVuYReuVNglGqmG+fz00+KVbfP49pxLtFM68uHXa91KD
//mMP4Q+64tmkWoiqtnU3bxsz3yVEJAkAqCzYQwFdBL2gdRXowGfhdfvLQE4rmpEuA
//OhyU1yxIHpci6DwWv39fFdKLcx7ggl2nC/N5bq0ct+1toNMTKDxlAkA/L0i7IDxa
//wfAG3JsjGEKmkk8aUyiOg/JFnklapmyTNQE1C67nPLbKKjb2EggsQnqHjqqcF2YS
//N38L99n2hiMn
//-----END PRIVATE KEY----- //========加密=======
// $pi_key = openssl_pkey_get_private($private_key);// 可用返回资源id
// $pu_key = openssl_pkey_get_public($public_key);
// $data = '{"ip":"192.168.0.1","domain":"www.baidu.com"}';
// openssl_public_encrypt($data, $encrypted, $pu_key); // 公钥加密
// // 加密后的字符
// var_dump($this->urlsafe_b64encode($encrypted));
// die; //========解密========
// php 加密后的值
//$str = "PXrR2AoSFPdMLis4HWKFbHsIsuAjHZVI8TXfsNvzrEYbafWLvpLm3wa_dqqRJwX2GCmOb2GKo087WCIAUPpZxpJHJ44uQKFEoagUQCyRi3LgCqL7CDPHJHmfEfFgp4hbk04hJ3LVPh4Pz4dOGc4To3OOgQSCIkvytY3fz7Fwv0U";
// js 使用php公钥加密后的值
// q5BaGcWoKFSasuAEXeTTy8PfcaHR4xdlurviK4fAoNT3jMiuN/vAJQVxklcFjqql2bn0i6IxG8DiWMAXm8nVFfTOINp811BLYjsHBymFStrTiEiPekL8txK4z5bl6OFi43FLQT96h8XY8zcJL/UFq/NJShVlg/kWHvVixfZF4NI=
// java 使用PHP生成公钥加密后的值
//O91XUcQV8pu_FqnuXO6qkfB-6tEVJVNdlHOnArEcj71JRq_rIHYkpYrOnEiMfKaXrNbyWISiPX14OkZ5mbK92ux58w8Vv8JLkizZ0QUESaJd974l1YcxiddBpKRcgxVB3Vh7RudchzFta64iiOru9fvGU5Uza4KiOLU9PqD8Z-w
$str = 'O91XUcQV8pu/FqnuXO6qkfB+6tEVJVNdlHOnArEcj71JRq/rIHYkpYrOnEiMfKaXrNbyWISiPX14OkZ5mbK92ux58w8Vv8JLkizZ0QUESaJd974l1YcxiddBpKRcgxVB3Vh7RudchzFta64iiOru9fvGU5Uza4KiOLU9PqD8Z+w=';
$d = $this->urlsafe_b64decode($str);
$pi_key = openssl_pkey_get_private($private_key); // 可用返回资源id
@openssl_private_decrypt($d, $decrypted, $pi_key); // 私钥解密 echo $decrypted;
} //url base64解码
protected function urlsafe_b64decode($string)
{
$data = str_replace(array('-','_'),array('+','/'),$string);
$mod4 = strlen($data) % 4;
if ($mod4) {
$data .= substr('====', $mod4);
}
return base64_decode($data);
} //url base64编码
protected function urlsafe_b64encode($string)
{
$data = base64_encode($string);
$data = str_replace(array('+','/','='),array('-','_',''),$data);
return $data;
}
}
详情可以了解:
https://my.oschina.net/gKWW0kOYB/blog/1836342
附js文件下载:点击
通用RSA加密 - PHP+Java+Javascript加密解密的更多相关文章
- js MD5加密与 java MD5加密不一致
因为该项目会部署到多台机器,所以需要用字符生成唯一的MD5,但是js生成的MD5和java生成的MD5不一致.经过博主查阅资料发现java生成MD5用的是utf-8的编码,而且js用的是2进制.那我就 ...
- JS客户端RSA加密,Java服务端解密
常用语网页客户端对密码加密,在后端java解密还原 java代码依赖 <dependency> <groupId>commons-codec</group ...
- Java 使用blob对H5视频播放进行加密《java视频加密》
1.创建一个H5 <video>标签 <video id="sound" type="video/mp4" controls="co ...
- Java & PHP & Javascript 通用 RSA 加密 解密 (长字符串)
系统与系统的数据交互中,有些敏感数据是不能直接明文传输的,所以在发送数据之前要进行加密,在接收到数据时进行解密处理:然而由于系统与系统之间的开发语言不同. 本次需求是生成二维码是通过java生成,由p ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- RSA javascript加密 lua解密
一个在线RSA非对称加密解密,可以用这个地址生成公钥和私钥 https://blog.zhengxianjun.com/online-tool/rsa/ javascript加密 jsencrypt. ...
- RSA,JAVA私钥加密,C#公钥解密
做这个东西在坑里爬了3天才爬出来,记录下供园友参考.C#程序员一枚,项目需要和Java做数据交互,对方甩了段密文和一个CER证书给我,然后我要对其密文进行解密. RSA 非对称加密,对方用私钥加密,我 ...
- RSA 加密算法 Java 公钥加密私钥解密 和 私钥加密公钥解密 的特点
package com.smt.cipher.unsymmetry; import org.apache.commons.codec.binary.Base64; import org.apache. ...
- 安卓、IOS端AEC密钥加密 Java端密钥解密通用实现(16进制表现形式)
由于业务需求,需要实现在客户端对重要信息进行加密,在服务端进行解密.客户端包括IOS和安卓的 服务端位Java. 注意密钥 需要保持一致,可以自己定义 . 安卓端加密代码: ============= ...
随机推荐
- pycharm 远程调试代码
我们在本地开发的时候,有时候需要使用到远程服务器的环境,如我们在调试微信或支付宝支付的时候. 那我们如何通过本地pycharm环境连接远程服务器进行调试呢? 1.pycharm和远程服务器连接 1)点 ...
- 菜鸟学IT之四则运算升级版
菜鸟学IT之四则运算升级版 本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213 团队代码github远程仓库的 ...
- "=="和 equals 方法究竟有什么区别?
"=="和 equals 方法究竟有什么区别? ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同, 要比较两个基本类型的数据或两个引 ...
- 【.Net】优秀的开源框架
AutoMapper 官网:http://automapper.org/ github:https://github.com/AutoMapper/AutoMapper 文档:http://autom ...
- mock详解
一.Mock在单元测试中扮演一个什么角色 有时,你需要为单元测试的初始设置准备一些“其他”的代码资源.但这些资源兴许会不可用,不稳定,或者是使用起来太笨重.你可以试着找一些其他的资源替代:或者你可以通 ...
- 多线程threading
threading用于提供线程相关的操作,线程是应用程序中工作的最小单元.python当前版本的多线程库没有实现优先级.线程组,线程也不能被停止.暂停.恢复.中断. 1. threading模 ...
- 【XSY3309】Dreamweaver 高斯消元 拉格朗日插值
题目大意 这是一道通信题. 给你 \(8\) 个 \(32\) 位整数.加密端要把这些数加密成至少 \(1000\) 个 \(32\) 位整数,交互库会把这些整数随机打乱后发给解密端,解密端最多能获得 ...
- python学习日记(面向对象——组合)
组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合 圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积.圆环的周长是内部圆的周长加上外部圆的周长.这个时候,我们就首先实现一 ...
- Celery
在程序的运行过程中,我们经常会碰到一些耗时耗资源的操作,为了避免它们阻塞主程序的运行,我们经常会采用多线程或异步任务.比如,在 Web 开发中,对新用户的注册,我们通常会给他发一封激活邮件,而发邮件是 ...
- ArrayDataProvider数据分页
模型 public function search($page=10){ $lists = self::find()->orderBy('id DESC')->all(); $dataPr ...