首页

文章

php有什么加密出来比较短的加密方法

发布网友 发布时间:2022-04-19 12:51

我来回答

2个回答

懂视网 时间:2022-04-28 09:00

php实现不对称加密的方法:首先创建一个PHP示例文件;然后使用openssl实现非对称加密;最后通过“$rsa = new Rsa('ssl-key');”进行测试即可。

推荐:《PHP视频教程》

PHP实现非对称加密


至于什么是非对称加密,这里就不说啦,大家谷歌去吧。这里说明的是,最近在做一个对外的充值加密服务,那么涉及到这个加密的处理,中间遇到几个小问题,所以记录下,方便自己下次查阅。

详细代码

<?php
/**
 * 使用openssl实现非对称加密
 * 
 * @since 2015-11-10
 */
class Rsa
{
 /**
 * 私钥
 * 
 */
 private $_privKey;
 /**
 * 公钥
 * 
 */
 private $_pubKey;
 /**
 * 保存文件地址
 */
 private $_keyPath;
 /**
 * 指定密钥文件地址
 * 
 */
 public function __construct($path)
 {
 if (empty($path) || !is_dir($path)) {
  throw new Exception('请指定密钥文件地址目录');
 }
 $this->_keyPath = $path;
 }
 /**
 * 创建公钥和私钥
 * 
 */
 public function createKey()
 {
 $config = [
  "config" => 'D:wampinapacheapache2.4.9confopenssl.cnf',
  "digest_alg" => "sha512",
  "private_key_bits" => 4096,
  "private_key_type" => OPENSSL_KEYTYPE_RSA,
 ];
 // 生成私钥
 $rsa = openssl_pkey_new($config);
 openssl_pkey_export($rsa, $privKey, NULL, $config);
 file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key', $privKey);
 $this->_privKey = openssl_pkey_get_public($privKey);
 // 生成公钥
 $rsaPri = openssl_pkey_get_details($rsa);
 $pubKey = $rsaPri['key'];
 file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'pub.key', $pubKey);
 $this->_pubKey = openssl_pkey_get_public($pubKey);
 }
 /**
 * 设置私钥
 * 
 */
 public function setupPrivKey()
 {
 if (is_resource($this->_privKey)) {
  return true;
 }
 $file = $this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key';
 $privKey = file_get_contents($file);
 $this->_privKey = openssl_pkey_get_private($privKey);
 return true;
 }
 /**
 * 设置公钥
 * 
 */
 public function setupPubKey()
 {
 if (is_resource($this->_pubKey)) {
  return true;
 }
 $file = $this->_keyPath . DIRECTORY_SEPARATOR . 'pub.key';
 $pubKey = file_get_contents($file);
 $this->_pubKey = openssl_pkey_get_public($pubKey);
 return true;
 }
 /**
 * 用私钥加密
 * 
 */
 public function privEncrypt($data)
 {
 if (!is_string($data)) {
  return null;
 }
 $this->setupPrivKey();
 $result = openssl_private_encrypt($data, $encrypted, $this->_privKey);
 if ($result) {
  return base64_encode($encrypted);
 }
 return null;
 }
 /**
 * 私钥解密
 * 
 */
 public function privDecrypt($encrypted)
 {
 if (!is_string($encrypted)) {
  return null;
 }
 $this->setupPrivKey();
 $encrypted = base64_decode($encrypted);
 $result = openssl_private_decrypt($encrypted, $decrypted, $this->_privKey);
 if ($result) {
  return $decrypted;
 }
 return null;
 }
 /**
 * 公钥加密
 * 
 */
 public function pubEncrypt($data)
 {
 if (!is_string($data)) {
  return null;
 }
 $this->setupPubKey();
 $result = openssl_public_encrypt($data, $encrypted, $this->_pubKey);
 if ($result) {
  return base64_encode($encrypted);
 }
 return null;
 }
 /**
 * 公钥解密
 * 
 */
 public function pubDecrypt($crypted)
 {
 if (!is_string($crypted)) {
  return null;
 }
 $this->setupPubKey();
 $crypted = base64_decode($crypted);
 $result = openssl_public_decrypt($crypted, $decrypted, $this->_pubKey);
 if ($result) {
  return $decrypted;
 }
 return null;
 }
 /**
 * __destruct
 * 
 */
 public function __destruct() {
 @fclose($this->_privKey);
 @fclose($this->_pubKey);
 }
}
?>

测试

$rsa = new Rsa('ssl-key');
//私钥加密,公钥解密
echo "待加密数据:segmentfault.com
";
$pre = $rsa->privEncrypt("segmentfault.com");
echo "加密后的密文:
" . $pre . "
";
$pud = $rsa->pubDecrypt($pre);
echo "解密后数据:" . $pud . "
";
//公钥加密,私钥解密
echo "待加密数据:segmentfault.com
";
$pue = $rsa->pubEncrypt("segmentfault.com");
echo "加密后的密文:
" . $pue . "
";
$prd = $rsa->privDecrypt($pue);
echo "解密后数据:" . $prd;

重要问题

这里特别要注意的是在配置中要指定openssl.cnf的文件地址,或者设置个OPENSSL_CONF全局变量就可以了。

热心网友 时间:2022-04-28 06:08

一般来说,加密分为两个部分,一个是非对称加密,一个是对称加密,使用对称加密加密正文信息,使用非对称加密加密对称加密的密钥,然后发送加密数据(消息摘要和数字签名就不讨论了),这是正规的数据加密策略,对称加密默认支持大数据分段加密策略,你只需要从接口中完成加密即可,而且对称加密速度比非对称加密快很多,如果你需要使用这个策略建议使用AES。如果你不愿意使用对称加密,只愿意使用AES加密,那你就必须丧失速度了,而且自己处理分段加密,因为RSA加密通常是117个字节就要分段(这个长度可能和密钥长度有关,我是用的接口是117),你需要自己把数据变成N个117字节的数据段来完成加密,解密也需要自己完成字节拼装。
李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 商业代理商业代理的特征 如何看微信有没有开通微众银行 为什么微众没有开户 微众银行怎么开户 微众银行APP开户流程是什么? 唐古拉山海拔唐古拉山海拔是多少 怎么看待取消跳广场舞的人的退休金 如何选购新鲜的蓝田水柿? 恭城水柿柿树作用 创维洗衣机使用教程 创维全自动洗衣机怎么使用 自动开门器 狗羊属相婚姻相配吗 3岁的小孩不会说话怎么办 如何给php代码加密 php实现rsa算法,该怎么处理 php入门教程 iOS想PHP服务端传数据,怎么加密好 怎么对PHP文件进行加密 php接口怎么加密啊 PHP数据加密怎么做,需求看问题补充 怎么处理php加密的数据 php excel加密的实现方法有什么 用php将密码存入数据库,用什么方法进行加密? PHP如何进行加密 实现数据安全 如何对PHP文件进行加密 PHP传值加密 分享如何使用PHP将URL地址参数进行加密传输 PHP的传输数据加密是怎么实现的 源文件格式是什么意思啊? 怎样关闭爱奇艺里面的自动续费 黄金vip会员怎么取消自动续费 黄金vip会员一个月自动续费怎么取消 什么叫源文件? php怎么在post前加密用户名 密码 php做sns游戏需要注意游戏数据传输的加密吗? oppo手机建议买哪款? oppo手机推荐入手哪一款好? oppo手机建议买哪款 目前市面上OPPO手机哪款性价比高,适合购买? 目前oppo手机哪款性价比高? 目前oppo手机哪款性价比高 OPPO手机哪款手机值得入手? 荣耀手机和OPPO手机买哪款合适啊? 我想买个oppo手机,建议哪款好 华为手机和OPPO手机买哪款比较合适? 荣耀手机和OPPO手机买哪款? oppo和华为买哪款手机合适? 荣耀手机和OPPO手机买哪款了? 华为手机和OPPO手机买哪款比较好点了? 荣耀手机和OPPO手机买哪款合适? 什么是源文件? 源文件和原文件有什么不同? 什么叫源文件?(设计里的)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com