rsa/ecb/pkcs1padding php,PHPJAVA RSA/ECB/PKCS1Padding 加密解密
PHP代码:
$privateKeyFilePath = '-----BEGIN RSA PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJDArkki2k3+xhze
v5emztqFtUhOzVlSveQ5dOLC4nNlLg8r81I9xBaXB7m4rb6lVjLgUuAXKUJ8y7yH
eE02s695cR/ZD0fierrMKMkmTFZIqOVYchn15N8EPz5e8WFirtP+Kaol4jDOaLCP
CSIs8QrQE6kEC7WDBi2/0mCkNI7PAgMBAAECgYB0oZuMODXXZDGyb1PGWFQRRGyl
n0Db+MwiCJ2CXG5jdiHffZUnLbdCUFycKw5rLwK+KXr9LgxDkxQBitHGvQ2XXO8w
v/2MQT658Eb49iQxZfuuhFFN8YIJZ4oFVyQQWXyCRAopyi/B0Eh6LTTTPjC/udPX
MoC0vSZl93Db8KPdyQJBANLPOnmyQmua6za/fFhWl13lsa+Ko73LhGi6dpiBjdpw
j0hp6NV/7yGCvHJFUr0hc9p5/lVJHkeAS/QtxF1IqXMCQQCvyGVL5uXj4didkO50
4HDgpPAgdROCZ6KrrNIf+RnCDn9Ffa1oA+n5cnno4trZVAYLU4yzZ63tQ/Z81ZfS
+h41AkBPXuyyUzaE0zBKTbBghkG5fbj30egyloTE9aefZe/l1clsx0t9zwxW/qU7
FPTA9u5qzNHAhKYc36Y5Sl4LjUcXAkBX50mopEXQKI+Pc/ubHOW1oSWnxYRFERhK
63iEnqgf3+oLUSbXPiXSJUoLiO5SAe+n2FcjHDTg0ry/fnyW95cFAkEAyllpaHTu
V5FPt6J5wZcEUbZoZsxYGmfUEg6HUE8BbGgRWwaem94p668ILaqGtxGKLKgbWoTM
Z8ZM+5cR/+C+yA==
-----END RSA PRIVATE KEY-----';
/**
* 公钥文件的路径
*/
$publicKeyFilePath = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQwK5JItpN/sYc3r+Xps7ahbVI
Ts1ZUr3kOXTiwuJzZS4PK/NSPcQWlwe5uK2+pVYy4FLgFylCfMu8h3hNNrOveXEf
2Q9H4nq6zCjJJkxWSKjlWHIZ9eTfBD8+XvFhYq7T/imqJeIwzmiwjwkiLPEK0BOp
BAu1gwYtv9JgpDSOzwIDAQAB
-----END PUBLIC KEY-----';
extension_loaded('openssl') or die('php需要openssl扩展支持');
/**
* 生成Resource类型的密钥,如果密钥文件内容被破坏,openssl_pkey_get_private函数返回false
*/
$privateKey =openssl_pkey_get_private($privateKeyFilePath);
/**
* 生成Resource类型的公钥,如果公钥文件内容被破坏,openssl_pkey_get_public函数返回false
*/
$publicKey =openssl_pkey_get_public($publicKeyFilePath);
($privateKey) or die('密钥不可用');
($publicKey) or die('公钥不可用');
/**
* 原数据
*/
$originalData = 'test';
/**
* 加密以后的数据,用于在网路上传输
*/
$encryptData = '';
echo '原数据为:', $originalData, '
';
///用公钥加密
if (openssl_public_encrypt($originalData,$encryptData, $publicKey)) {
//Uu3FzghBLs3dnWEO8Gc7p1QGf2MH+VMddUk0ui2TQlcKbr+DMKRJfsTiQYh5N9Bu+kEyKG72f90l34rNJAkLruZJtuqRTfZ8vnG2P1UEkW+7063GVPz6o6mfrL46FN4j0mpIP6sAshvvUAGudlVTde2KT7bI8E0EqZU9D7WRKCI=
echo '加密成功,加密后数据(base64_encode后)为:', base64_encode($encryptData), '
';
echo '加密成功,加密后数据(bin2hex后)为:',bin2hex($encryptData), '
';
} else {
die('加密失败');
}
// $secret = 'iZEksazCdYhkbqM2kRMo9E+oSFCYnTkB0JGOMN5m3ZeJr8ShtrifvHMWQG605pMvO31oalcU8P8jzkEMLyCV0/ATc2AEF6cxwRujl315tB5RClq8aMYhcAlfOTZeuQHJPg3tM98snEVTrVsRJzr94VYcA394yyln+j+44+3wNaWMNSr+7H/H33XmFN9TcE70Jt1AC/PYNLr0an2DNwBtiDt4ttPfHF2iYJqtrH/K/UNxHd5uakpMKX7QRqEYq3Z6d6dCtlv76Ex2SVTWdNofqu7GbMMemo5hEfRf80q8O0o0Kqn3o6cQ13X7aWY/1pGhkfeoC0yauZx4wKrpdmjgd4lCHDlCVgwLiUdG/6U+ckd4CGu7cQtjfy7UKwOJkCqrB+AGbdjaIyiBGdkji39zf2eGJHRzXCVvN3nyRd/AQlwX0sDsICS+R26SNkDmKo8aWBQspzLUkPMZWGyFRy8cRnILYJwpr4Qhq7JKajHQkaAG6RLQ91NsSEhOGMunAQFver4hsk22NRAY5NugT8qOsUarALucT5fwlpDoOEF4lGpF4uLmTGSPMBrptRrPgWSdGs0p/G/pSx9INOgd5X5e/F12GLqIfZIA6JVyQL4E5AQ0S+aZPNdyEiL1Ufz5A5LcILue/PES5ot45LjynTLWZ2lMRiohBeAsEU57j4KCn8QTTiDdRss+qM7UaCrILUrE6C5/PMPOVHxvICsDYmTLY7nfY2M5cH/wPpuPzcbhWlLltk3wmgf34BugVa2mjq8l5x9EoWv+YDXBWqsegL3DpfhMfvAC2Lk1dsiXPpNLgaX+oY6Xy+0T9paCIWs1ZV8A7M2eNWZPMOOiXOZx+l4TTHNrsQCrUTQzCOu+prmerv6QMEKri+X0hfNmBMl9qodlLo3BI1JtDql/g/2qq1Aq8ETkZ9UznLETxwvvqosZjiobhHnKvlH9kaEjsK5XwGX9q4+yJVNAY5IB5DL3uFdnmnUr7GT1o/+8scJQ0WunBWroUYqpb1hr2p+RvzS8PgpA';
// $encryptData = base64_decode($secret);
// var_dump(strlen($encryptData));
///用私钥解密
$decryptData ='';
$crypto = '';
foreach (str_split($encryptData, 128) as $chunk) {
openssl_private_decrypt($chunk,$decryptData, $privateKey);
$crypto .= $decryptData;
}
echo '解密成功,解密后数据为:',$crypto, '
';
// if (openssl_private_decrypt($encryptData,$decryptData, $privateKey)) {
// echo '解密成功,解密后数据为:',$decryptData, '
';
// } else {
// die('解密成功');
// }
?>
JAVA代码:
public static void main(String[] args) throws Exception {
String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCQwK5JItpN/sYc3r+Xps7ahbVITs1ZUr3kOXTiwuJzZS4PK/NSPcQWlwe5uK2+pVYy4FLgFylCfMu8h3hNNrOveXEf2Q9H4nq6zCjJJkxWSKjlWHIZ9eTfBD8+XvFhYq7T/imqJeIwzmiwjwkiLPEK0BOpBAu1gwYtv9JgpDSOzwIDAQAB";
String test = encrypt("test", getPublicKey(publicKey));
System.out.println(test);
String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJDArkki2k3+xhzev5emztqFtUhOzVlSveQ5dOLC4nNlLg8r81I9xBaXB7m4rb6lVjLgUuAXKUJ8y7yHeE02s695cR/ZD0fierrMKMkmTFZIqOVYchn15N8EPz5e8WFirtP+Kaol4jDOaLCPCSIs8QrQE6kEC7WDBi2/0mCkNI7PAgMBAAECgYB0oZuMODXXZDGyb1PGWFQRRGyln0Db+MwiCJ2CXG5jdiHffZUnLbdCUFycKw5rLwK+KXr9LgxDkxQBitHGvQ2XXO8wv/2MQT658Eb49iQxZfuuhFFN8YIJZ4oFVyQQWXyCRAopyi/B0Eh6LTTTPjC/udPXMoC0vSZl93Db8KPdyQJBANLPOnmyQmua6za/fFhWl13lsa+Ko73LhGi6dpiBjdpwj0hp6NV/7yGCvHJFUr0hc9p5/lVJHkeAS/QtxF1IqXMCQQCvyGVL5uXj4didkO504HDgpPAgdROCZ6KrrNIf+RnCDn9Ffa1oA+n5cnno4trZVAYLU4yzZ63tQ/Z81ZfS+h41AkBPXuyyUzaE0zBKTbBghkG5fbj30egyloTE9aefZe/l1clsx0t9zwxW/qU7FPTA9u5qzNHAhKYc36Y5Sl4LjUcXAkBX50mopEXQKI+Pc/ubHOW1oSWnxYRFERhK63iEnqgf3+oLUSbXPiXSJUoLiO5SAe+n2FcjHDTg0ry/fnyW95cFAkEAyllpaHTuV5FPt6J5wZcEUbZoZsxYGmfUEg6HUE8BbGgRWwaem94p668ILaqGtxGKLKgbWoTMZ8ZM+5cR/+C+yA==";
String decrypt = decrypt(test, getPrivateKey(privateKey));
System.out.println(decrypt);
}
/**
* RSA解密
*
* @param data
* 待解密数据
* @param privateKey
* 私钥
* @return
*/
public static String decrypt(String data, PrivateKey privateKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] dataBytes = Base64.decodeBase64(data);
int inputLen = dataBytes.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offset = 0;
byte[] cache;
int i = 0;
// 对数据分段解密
while (inputLen - offset > 0) {
if (inputLen - offset > MAX_DECRYPT_BLOCK) {
cache = cipher.doFinal(dataBytes, offset, MAX_DECRYPT_BLOCK);
} else {
cache = cipher.doFinal(dataBytes, offset, inputLen - offset);
}
out.write(cache, 0, cache.length);
i++;
offset = i * MAX_DECRYPT_BLOCK;
}
byte[] decryptedData = out.toByteArray();
out.close();
// 解密后的内容
return new String(decryptedData, "UTF-8");
}
/**
* RSA加密
*
* @param data
* 待加密数据
* @param publicKey
* 公钥
* @return
*/
public static String encrypt(String data, PublicKey publicKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
int inputLen = data.getBytes().length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offset = 0;
byte[] cache;
int i = 0;
// 对数据分段加密
while (inputLen - offset > 0) {
if (inputLen - offset > MAX_ENCRYPT_BLOCK) {
cache = cipher.doFinal(data.getBytes(), offset, MAX_ENCRYPT_BLOCK);
} else {
cache = cipher.doFinal(data.getBytes(), offset, inputLen - offset);
}
out.write(cache, 0, cache.length);
i++;
offset = i * MAX_ENCRYPT_BLOCK;
}
byte[] encryptedData = out.toByteArray();
out.close();
// 获取加密内容使用base64进行编码,并以UTF-8为标准转化成字符串
// 加密后的字符串
return new String(Base64.encodeBase64String(encryptedData));
}
在linux上生成privateKey,
openssl genrsa -out rsa_private_key.pem 1024
根据privateKey生成publicKey
openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout
将java私钥或公钥转换成pem格式,php代码:
class entry {
var $pub_key;
function redPukey()
{
$pubKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJDArkki2k3+xhzev5emztqFtUhOzVlSveQ5dOLC4nNlLg8r81I9xBaXB7m4rb6lVjLgUuAXKUJ8y7yHeE02s695cR/ZD0fierrMKMkmTFZIqOVYchn15N8EPz5e8WFirtP+Kaol4jDOaLCPCSIs8QrQE6kEC7WDBi2/0mCkNI7PAgMBAAECgYB0oZuMODXXZDGyb1PGWFQRRGyln0Db+MwiCJ2CXG5jdiHffZUnLbdCUFycKw5rLwK+KXr9LgxDkxQBitHGvQ2XXO8wv/2MQT658Eb49iQxZfuuhFFN8YIJZ4oFVyQQWXyCRAopyi/B0Eh6LTTTPjC/udPXMoC0vSZl93Db8KPdyQJBANLPOnmyQmua6za/fFhWl13lsa+Ko73LhGi6dpiBjdpwj0hp6NV/7yGCvHJFUr0hc9p5/lVJHkeAS/QtxF1IqXMCQQCvyGVL5uXj4didkO504HDgpPAgdROCZ6KrrNIf+RnCDn9Ffa1oA+n5cnno4trZVAYLU4yzZ63tQ/Z81ZfS+h41AkBPXuyyUzaE0zBKTbBghkG5fbj30egyloTE9aefZe/l1clsx0t9zwxW/qU7FPTA9u5qzNHAhKYc36Y5Sl4LjUcXAkBX50mopEXQKI+Pc/ubHOW1oSWnxYRFERhK63iEnqgf3+oLUSbXPiXSJUoLiO5SAe+n2FcjHDTg0ry/fnyW95cFAkEAyllpaHTuV5FPt6J5wZcEUbZoZsxYGmfUEg6HUE8BbGgRWwaem94p668ILaqGtxGKLKgbWoTMZ8ZM+5cR/+C+yA==";
$pem = chunk_split($pubKey,64,"\n");//转换为pem格式的公钥
$pem = "-----BEGIN RSA PRIVATE KEY-----\n".$pem."-----END RSA PRIVATE KEY-----\n";
var_dump($pem);
$publicKey = openssl_pkey_get_public($pem);
return $publicKey;
}
}
$entry = new entry();
$entry->redPukey();
?>
rsa/ecb/pkcs1padding php,PHPJAVA RSA/ECB/PKCS1Padding 加密解密相关推荐
- java和c 的rsa加密算法_RSA算法签名技术Java与C++统一(加密解密结果一样)
RSA算法签名技术Java与C++统一 (加密解密结果一样) 源代码下载地址:http://www.doczj.com/doc/64f44a94a0116c175f0e484d.html/produc ...
- C#加密解密(DES,AES,Base64,md5,SHA256,RSA,RC4)
一:异或^简单加解密(数字类型) 1:原理: 异或用于比较两个二进制数的相应位,在执行按位"异或"运算时,如果两个二进制数的相应位都为1或者都为0,则返回0;如果两个二进制数的相应 ...
- [crypto]-52-python3中rsa(签名验签加密解密)aes(ecb cbc ctr)hmac的使用,以及unittest测试用
环境: 在ubuntu14.04下,记得安装:sudo pip3 install pycrypto 代码示例1: =========================== import base64 f ...
- delphi7aes加密解密与java互转_跨语言(java vs python vs nodejs)的RSA加解密问题探讨
多次被问到这样的问题: java服务端的rsa加密操作已经完成,返回一个16进制的字符串给python平台,但是在python进行私钥解密的时候发现行不通.... 前端python加密,后端用java ...
- node 加密解密模块_跨语言(java vs python vs nodejs)的RSA加解密问题探讨
多次被问到这样的问题: java服务端的rsa加密操作已经完成,返回一个16进制的字符串给python平台,但是在python进行私钥解密的时候发现行不通.... 前端python加密,后端用java ...
- PHP RSA加密解密
今天我来说下如何使用RSA方式进行加密解密 一.生成公钥和私钥: 使用OpenSSL就可以,一般Linux和mac有自带的:windows的可自行安装: 通过如下命令生成: 注: RSA非对称加密内容 ...
- 常用加密解密算法【RSA、AES、DES、MD5】介绍和使用
为了防止我们的数据泄露,我们往往会对数据进行加密,特别是敏感数据,我们要求的安全性更高.下面将介绍几种常用的加密算法使用.这些算法的加密对象都是基于二进制数据,如果要加密字符串就使用统一编码(如:ut ...
- 非对称加密算法之RSA介绍及OpenSSL中RSA常用函数使用举例
RSA算法,在1977年由Ron Rivest.Adi Shamirh和LenAdleman,在美国的麻省理工学院开发完成.这个算法的名字,来源于三位开发者的名字.RSA已经成为公钥数据加密标准. R ...
- [crypto]-53-openssl命令行的使用(aes/rsa签名校验/rsa加密解密/hmac)
常用技巧 如何编写一个二进制规律性的文件, 比如你可以编写一个"0123456789abcdef"的文本文件,记得删除换行符然后用ultraedit打开,ctrl+H就可以看到二进 ...
最新文章
- 艾宾浩斯记忆表格excel_好的记忆方法是一切学习的关键(艾宾浩斯记忆法)
- 使用caffe训练faster-rcnn时遇到的问题总结
- jena fuseki RDF应用
- 如何使用SAP UI5 SDK网站查询指定控件的属性如何使用
- firebird 3.0 开发者指南_11月19日召开 2020 vivo开发者大会报名正式开启
- html5 markdown,Markdown常用语法
- 使用charles 抓取手机上的操作
- 特斯拉工程师当UP主评测自动驾驶,结果被公司开除
- python从入门到精通需要多久--零基础学Python,从入门到精通需要多长时间
- 二叉树三种遍历非递归算法
- Flash学习资源汇编
- Java调用ffmepg+mencoder视频格式转换(*)
- 线代 | 矩阵的迹 向量内积如何转化为迹
- 与android虚拟机传输文件,android 在本机和虚拟机设备之间复制文件
- python和按键精灵自动化测试_自动化测试程序和按键精灵
- 通过改变电脑的某些设置来呵护我们的眼睛
- 大数据治理的五个核心要素
- SpringBoot再回首:SpringBoot之Servlet用法
- python练习7——PTA
- java 验证码_java实现简单的验证码功能