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 非对称加密解密,超长字符串分块处理相关推荐

  1. java rsa 117_java实现RSA非对称加密解密

    之前写过一篇java实现AES对称加密解密 在对密码加密传输的场景下 RSA非对称加密解密可能会更加适合. 原理就是后台生成一对公钥和私钥,公钥给前端用来加密,后台用私钥去解密,保证了传输过程中就算被 ...

  2. java的rsa作用_java 中RSA的方式实现非对称加密的实例

    java 中rsa的方式实现非对称加密的实例 rsa通俗理解: 你只要去想:既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密:同理,既然是签名,那肯 ...

  3. Java DES、AES、RSA、DM5读取文件加密解密

    //下面代码是直接读取文件来进行加密解密,算法文件 package Test; import javax.crypto.KeyGenerator; import javax.crypto.Cipher ...

  4. Java 实现RSA 签名/验签与加密解密

    文章目录 一.前言 二.签名与验签 1.程序代码如下: 2.程序运行结果: 三.加密解密 1.添加加解密方法 2.程序运行结果 一.前言 RSA 算法相比于AES算法不同的是RSA的秘钥为不同的两个一 ...

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

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

  6. RSA非对称加密解密概念

    1.RSA加密解密在线计算网站 网站1:https://www.bejson.com/enc/rsa/ 网站2:https://the-x.cn/cryptography/Rsa.aspx 2.PKC ...

  7. 工具类:登录密码的加解密(jsencrypt实现前端RSA非对称加密解密

    定义工具类:utils/jsenscrypt.js import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'// 密钥对生成 http://web.cha ...

  8. API接口加密—非对称加密解密之分段加解密

    引言: 对称加密:双方使用的同一个密钥,既可以加密又可以解密,这种加密方法称为对称加密,也称为单密钥加密. 优点:速度快,对称性加密通常在消息发送方需要加密大量数据时使用,算法公开.计算量小.加密速度 ...

  9. daoi php_使用php生成RSA公钥私钥及进行加密解密和签名验证

    这篇文章主要介绍使用PHP开发接口,数据实现RSA加密解密后使用,实例分析了PHP自定义RSA类实现加密与解密的技巧,非常具有实用价值,需要的朋友可以参考下. 简单介绍RSA: RSA加密算法是最常用 ...

最新文章

  1. SHELL中的三神器:管道、重定向、backtick
  2. php正则匹配多个,php – 将多个匹配正则表达式合并为一个并获得匹配的表达式...
  3. linux kernel and user space通信机制,Linux内核与用户空间通信机制研究.pdf
  4. extern C __declspec(dllexport) __declspec(dllimport) 和 def
  5. Python---堆里有16颗豆子,有两个玩家依次取豆
  6. 初次了解node.js
  7. 【数据结构与算法】散列表
  8. HTML5 Web Worker的使用
  9. 作为曾经Oracle的一员,谈谈老东家的此次裁员
  10. 计算机保研-中科大计算机
  11. 编译时Collected errors
  12. xp系统开机自检很久_XP开机卡在自检不能进入系统的解决办法
  13. Harris角点检测及数据分析
  14. 工程流体力学笔记暂记43 (收缩喷管中的流动)
  15. android 矢量图片使用方法,Android中的矢量图
  16. 单片机C语言人数统计,基于单片机的人数统计系统设计.doc
  17. DL4J中文文档/开始/速查表
  18. 滚动穿透及IOS惯性滚动究极解决方案
  19. 在应用程序中将OJB作为一个存储层使用(二) (转)
  20. Ubuntu18.04 安装升级pip至20.2.2 坎坷过程

热门文章

  1. java手动提交事务_Mybatis是如何将事务和连接池高效的结合的
  2. NCSDK make install: Error in line 170
  3. Visual Studio Code 中文下载
  4. 如何让文字溢出自动变成省略号
  5. python做数据分类_二分类怎么做数据分析python
  6. python文件可以包括任何数据内容_python 文件数据合并(数据行不对应)?
  7. 03-drawcommands工程分析详解
  8. Android 百度地图-实现POI的搜索(搜索周边)附源码
  9. java 7.0下载_Java jre 7.0
  10. ensp保存文件在哪_eNSP——配置通过FTP进行文件操作