java rsa内容超长_RSA 非对称加密解密,超长字符串分块处理
class RsaServer
{
/**
* @var false|resource
*/
protected $key;
/**
* 分隔符
* @var string
*/
protected $mark = '.';
/**
* 分片长度
* @var int
*/
protected $length = 245;
/**
* 获取秘钥
* RsaServer constructor.
* @param string $key_file
* @param bool $is_pub
* @throws FileNotFoundException
*/
public function __construct(string $key_file, $is_pub = false)
{
if (!is_file($key_file)) {
throw new \Exception('key path is invalid');
}
$content = file_get_contents($key_file);
if ($is_pub) {
$this->key = openssl_pkey_get_public($content);
} else {
$this->key = openssl_pkey_get_private($content);
}
return $this;
}
/**
* 私钥加密
* @param string $data
* @return null|string
*/
public function privEncrypt($data = '')
{
$result = [];
if (!is_string($data)) {
return null;
} else if (strlen($data) > $this->length) {
foreach (str_split($data, $this->length) as $chunk) {
if (openssl_private_encrypt($chunk, $encrypted, $this->key)) {
$result[] = base64_encode($encrypted);
} else {
return null;
}
}
$result = implode($this->mark, $result);
} else {
$result = openssl_private_encrypt($data, $encrypted, $this->key) ? base64_encode($encrypted) : null;
}
return $result;
}
/**
* 公钥加密
* @param string $data
* @return null|string
*/
public function publicEncrypt($data = '')
{
$result = [];
if (!is_string($data)) {
return null;
} else if (strlen($data) > $this->length) {
foreach (str_split($data, $this->length) as $chunk) {
if (openssl_public_encrypt($chunk, $encrypted, $this->key)) {
$result[] = base64_encode($encrypted);
} else {
return null;
}
}
$result = implode($this->mark, $result);
} else {
$result = openssl_public_encrypt($data, $encrypted, $this->key) ? base64_encode($encrypted) : null;
}
return $result;
}
/**
* 私钥解密
* @param string $encrypted
* @return null
*/
public function privDecrypt($encrypted = '')
{
$result = '';
$encrypted_chunk = explode($this->mark, $encrypted);
if (!is_string($encrypted)) {
return null;
} else if (count($encrypted_chunk) > 1) {
foreach ($encrypted_chunk as $chunk) {
if (openssl_private_decrypt(base64_decode($chunk), $decrypted, $this->key)) {
$result .= $decrypted;
} else {
return null;
}
}
} else {
$result = openssl_private_decrypt(base64_decode($encrypted), $decrypted, $this->key) ? $decrypted : null;
}
return $result;
}
/**
* 公钥解密
* @param string $encrypted
* @return null
*/
public function publicDecrypt($encrypted = '')
{
$result = '';
$encrypted_chunk = explode($this->mark, $encrypted);
if (!is_string($encrypted)) {
return null;
} else if (count($encrypted_chunk) > 1) {
foreach ($encrypted_chunk as $chunk) {
if (openssl_public_decrypt(base64_decode($chunk), $decrypted, $this->key)) {
$result .= $decrypted;
} else {
return null;
}
}
} else {
$result = openssl_public_decrypt(base64_decode($encrypted), $decrypted, $this->key) ? $decrypted : null;
}
return $result;
}
}
java rsa内容超长_RSA 非对称加密解密,超长字符串分块处理相关推荐
- java rsa 117_java实现RSA非对称加密解密
之前写过一篇java实现AES对称加密解密 在对密码加密传输的场景下 RSA非对称加密解密可能会更加适合. 原理就是后台生成一对公钥和私钥,公钥给前端用来加密,后台用私钥去解密,保证了传输过程中就算被 ...
- java的rsa作用_java 中RSA的方式实现非对称加密的实例
java 中rsa的方式实现非对称加密的实例 rsa通俗理解: 你只要去想:既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密:同理,既然是签名,那肯 ...
- Java DES、AES、RSA、DM5读取文件加密解密
//下面代码是直接读取文件来进行加密解密,算法文件 package Test; import javax.crypto.KeyGenerator; import javax.crypto.Cipher ...
- Java 实现RSA 签名/验签与加密解密
文章目录 一.前言 二.签名与验签 1.程序代码如下: 2.程序运行结果: 三.加密解密 1.添加加解密方法 2.程序运行结果 一.前言 RSA 算法相比于AES算法不同的是RSA的秘钥为不同的两个一 ...
- CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互
(以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 [cp ...
- RSA非对称加密解密概念
1.RSA加密解密在线计算网站 网站1:https://www.bejson.com/enc/rsa/ 网站2:https://the-x.cn/cryptography/Rsa.aspx 2.PKC ...
- 工具类:登录密码的加解密(jsencrypt实现前端RSA非对称加密解密
定义工具类:utils/jsenscrypt.js import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'// 密钥对生成 http://web.cha ...
- API接口加密—非对称加密解密之分段加解密
引言: 对称加密:双方使用的同一个密钥,既可以加密又可以解密,这种加密方法称为对称加密,也称为单密钥加密. 优点:速度快,对称性加密通常在消息发送方需要加密大量数据时使用,算法公开.计算量小.加密速度 ...
- daoi php_使用php生成RSA公钥私钥及进行加密解密和签名验证
这篇文章主要介绍使用PHP开发接口,数据实现RSA加密解密后使用,实例分析了PHP自定义RSA类实现加密与解密的技巧,非常具有实用价值,需要的朋友可以参考下. 简单介绍RSA: RSA加密算法是最常用 ...
最新文章
- SHELL中的三神器:管道、重定向、backtick
- php正则匹配多个,php – 将多个匹配正则表达式合并为一个并获得匹配的表达式...
- linux kernel and user space通信机制,Linux内核与用户空间通信机制研究.pdf
- extern C __declspec(dllexport) __declspec(dllimport) 和 def
- Python---堆里有16颗豆子,有两个玩家依次取豆
- 初次了解node.js
- 【数据结构与算法】散列表
- HTML5 Web Worker的使用
- 作为曾经Oracle的一员,谈谈老东家的此次裁员
- 计算机保研-中科大计算机
- 编译时Collected errors
- xp系统开机自检很久_XP开机卡在自检不能进入系统的解决办法
- Harris角点检测及数据分析
- 工程流体力学笔记暂记43 (收缩喷管中的流动)
- android 矢量图片使用方法,Android中的矢量图
- 单片机C语言人数统计,基于单片机的人数统计系统设计.doc
- DL4J中文文档/开始/速查表
- 滚动穿透及IOS惯性滚动究极解决方案
- 在应用程序中将OJB作为一个存储层使用(二) (转)
- Ubuntu18.04 安装升级pip至20.2.2 坎坷过程
热门文章
- java手动提交事务_Mybatis是如何将事务和连接池高效的结合的
- NCSDK make install: Error in line 170
- Visual Studio Code 中文下载
- 如何让文字溢出自动变成省略号
- python做数据分类_二分类怎么做数据分析python
- python文件可以包括任何数据内容_python 文件数据合并(数据行不对应)?
- 03-drawcommands工程分析详解
- Android 百度地图-实现POI的搜索(搜索周边)附源码
- java 7.0下载_Java jre 7.0
- ensp保存文件在哪_eNSP——配置通过FTP进行文件操作