700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > PHP实现的RSA加密解密

PHP实现的RSA加密解密

时间:2020-01-08 17:47:34

相关推荐

PHP实现的RSA加密解密

最近学了RSA加密解密算法 根据流程写了一个能够进行完整的加密解密算法

<?phperror_reporting(E_ALL & ~E_NOTICE);ini_set("max_execution_time", 18000);set_time_limit(0);//随机两个数function creat_random_prime_number(){$random = array();//$a = rand(1000, 10000);//$a = rand(10, 100);$a = rand(3, 3);//$a = rand(2, 3);//$a = rand(2, 2);for ($i = 1; $i < $a; $i++) {$random[$i] .= rand(0, 9);}$random[0] = rand(1, 9);return $random;}//计算存到数组里的两个数的值function cacl_long_value($len, $random){$value = 0;for ($i = 0; $i < $len; $i++) {$value = bcadd($value, bcmul($random[$i], bcpow(10, $len - $i - 1)));}return $value;}//判断是否是质数function is_prime_number($value){$falg = 1;for ($i = 2; $i <= sqrt($value); $i++) {if (bcmod($value, $i) == 0) {$falg = 0;break;}}return $falg;}//判断E是否和L互质function if_E($E, $L){$falg = 1;$min = min($E, $L);for ($i = 2; $i <= $min; $i++) {if (bcmod($E, $i) == 0 && bcmod($L, $i) == 0)$falg = 0;}return $falg;}//找到一个Efunction creat_E($L){while (1) {$i = rand(2, $L);if (bcmod($L, $i) != 0) {$falg = if_E($i, $L);if ($falg == 1) {break;}continue;}}return $i;}//根据E计算E对L的逆function cacl_D($E, $L){$c = array();$q = array();$L_old = $L;for ($i = 1;; $i++) {$c[$i] = bcmod($L, $E);$q[$i] = bcdiv(bcsub($L, $c[$i]), $E);$L = $E;$E = $c[$i];if ($c[$i] == 1)break;}$b[0] = 0;$b[1] = 1;for ($j = 2; $j < $i + 2; $j++) {$b[$j] = bcadd(bcmul(bcmul((-1), $b[$j - 1]), $q[$j - 1]), $b[$j - 2]);$D = $b[$j];}if ($D < 0)return bcadd($L_old, $D);return $D;}//主函数for ($i = 0;; $i++) {$random_1 = creat_random_prime_number();$random_2 = creat_random_prime_number();$len_1 = count($random_1);$len_2 = count($random_2);$prime_value_1 = cacl_long_value($len_1, $random_1);$prime_value_2 = cacl_long_value($len_2, $random_2);$falg_1 = is_prime_number($prime_value_1);$falg_2 = is_prime_number($prime_value_2);if ($falg_1 == 1 && $falg_2 == 1 && $prime_value_1 != $prime_value_2) {break;}}echo "P=" . $prime_value_1;echo "</br>";echo "</br>";echo "Q=" . $prime_value_2;echo "</br>";echo "</br>";$N = bcmul($prime_value_1, $prime_value_2);echo "N=" . $N;echo "</br>";echo "</br>";$L = bcmul($prime_value_1 - 1, $prime_value_2 - 1);echo "L=" . $L;echo "</br>";echo "</br>";$E = creat_E($L);echo "E=" . $E;echo "</br>";echo "</br>";//此时公钥为($E,$N)$D = cacl_D($E, $L);echo "D=" . $D;echo "</br>";echo "</br>";//此时私钥为($D,$N)$mingwen = rand(1, $N);echo "明文=" . $mingwen;echo "</br>";echo "</br>";$miwen = bcmod(bcpow($mingwen, $E), $N);echo "密文=" . $miwen;echo "</br>";echo "</br>";$new_mingwen = bcmod(bcpow($miwen, $D), $N);echo "解密=" . $new_mingwen;

写的不好,多多谅解~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。