首页 » SEO优化 » PHPisprime技巧_加密算法之非对称加密

PHPisprime技巧_加密算法之非对称加密

访客 2024-10-23 0

扫一扫用手机浏览

文章目录 [+]

解密公式:明文 = (密文 ^ D) % N;45 ^ 47 % 77 = 502328880013965819626664594350710696732674427522624682751484215259552001953125 % 77 = 12;得出原文:12

PHP示例

下面是我用PHP实现的加密&解密示例,供大家参考(由于指数运算的结果集会很大,我们必须利用PHP中供应的BC Math系列函数打算)

PHPisprime技巧_加密算法之非对称加密

/ 冒牌RSA算法 @author zhjx922 // 判断数字是否为质数 @param $num @return bool /function isPrimeNumber($num) { $k = 0;//定义次数变量 for ($i = 1; $i <= $num; $i++) { if (bcmod($num, $i) == 0) { $k++;//如果取模即是0,次数k自加 } } if ($k == 2) { return true; } return false;}//求最小公倍数function minMultiple($a, $b){ if($b==0) //一定要考虑除数不能为零 { return $b; } else { $m = bccomp($a, $b) == 1 ? $a : $b; $n = bccomp($b, $a) == 1 ? $b : $a; for($i=2; ; $i++) { $mul = bcmul($m, $i); if(bcmod($mul, $n) == 0) { return $mul; } } } return bcmul($a, $b);}//求最大公约数function maxDivisor($a,$b){ $n = bccomp($a, $b) == 1 ? $b : $a; for($i = $n; $i>1; $i--) { if(bcmod($a, $i) == 0 && bcmod($b, $i) == 0) { return $i; //此处如果用echo $i;则输出结果为432;故应区分echo、return的差异 } } return 1;}do{ //随机一个质数P $p = mt_rand(101, 197);} while(!isPrimeNumber($p));do{ //随机一个质数Q $q = mt_rand(101, 197);} while(!isPrimeNumber($q));$n = bcmul($p, $q);//$l = minMultiple($p - 1, $q - 1); //经测试不可用$l = bcmul($p - 1, $q - 1);do { $e = mt_rand(2, $l - 1);}while(maxDivisor($e, $l) != 1);$d = 1;while(bcmod(bcmul($e,++$d), $l) != 1) {}echo 'p:' . $p . PHP_EOL;echo 'q:' . $q . PHP_EOL;echo 'n:' . $n . PHP_EOL;echo 'l:' . $l . PHP_EOL;echo 'e:' . $e . PHP_EOL;echo 'd:' . $d . PHP_EOL;echo "公钥:e={$e},n={$n}" . PHP_EOL;echo "私钥:d={$d},n={$n}" . PHP_EOL;//加密function encode($e, $n, $string) { $enString = ''; $len = strlen($string); for($i = 0; $i < $len; $i++) { $pow = bcpow(ord($string{$i}), $e); $mod = bcmod($pow, $n); $enString .= pack('L', $mod); } return $enString;}//解密function decode($d, $n, $string) { $deString = ''; $string = unpack('L', $string); $len = count($string); for($i = 1; $i <= $len; $i++) { $pow = bcpow($string[$i], $d); $mod = bcmod($pow, $n); $deString .= chr($mod); } return $deString;}$startTime = microtime(true);$string = '欢迎关注"假装是个程序员""大众年夜众号';echo "原文:" . $string . PHP_EOL;$encodeString = encode($e, $n, $string);echo "密文:" . $encodeString . PHP_EOL;$decodeString = decode($d, $n, $encodeString);echo "解密后:" . $decodeString . PHP_EOL;$endTime = microtime(true);echo "Total:" . ($endTime - $startTime) . 's.' . PHP_EOL;没有绝对安全的加密办法

没有什么加密办法能一贯保持绝对的安全,尤其常用的MD5,如果你的数据库中密码还是利用MD5的哈希结果不要笑话人家直接用明文存密码的人,五十步笑百步而已。


最近谷歌宣告破解了SHA-1,随着打算能力的提高,SHA-256,RSA等等也是迟早的事儿。

PHPisprime技巧_加密算法之非对称加密
(图片来自网络侵删)

标签:

相关文章

我国土地利用分类代码的构建与应用

土地利用分类代码是我国土地管理的重要组成部分,是土地资源调查、规划、利用和保护的依据。土地利用分类代码的构建与应用显得尤为重要。本...

SEO优化 2025-02-18 阅读0 评论0

微信跳转微信支付便捷支付体验的秘密武器

移动支付已成为人们日常生活中不可或缺的一部分。作为我国领先的社交平台,微信支付凭借其便捷、安全的支付方式,深受广大用户的喜爱。而微...

SEO优化 2025-02-18 阅读0 评论0

探寻会计科目代码背后的奥秘分类与

会计科目代码是会计信息系统中不可或缺的组成部分,它将企业的经济活动进行分类和归纳,为会计核算、财务分析和决策提供重要依据。本文将从...

SEO优化 2025-02-18 阅读1 评论0