简单 用php实现rsa算法 。
因为我是初中毕业, 对很多名词都不是太懂。。。。嘛, 然后找到了一个外国的视频教程,然后啪啪啪学了一个简单的ras加解密。
网上的大神一抓一大把, 但是我看不懂名词 :-(。 谁能告诉我更好的用法,感激不尽,前提是大白话。
这个东东原理就是:
你这里拿着私钥, 然后别人(客户端)拿着公钥。 随便公钥怎么加密,反正你这边可以解密。 但是中间人看不见了, 嘛,貌似就是这个原理吧。
然后试着写了一个php的, 原来要用bc才可(linux需要安装扩展, 毛线我用的windows)。 (ps: 谁来告诉我更好的用法?多谢) 没有写form表单。 没有封装函数。 过程是最容易理解的。。。。
<?php
header("Content-type:text/html;charset=utf-8");
/**
* ----------------------------------------------
* 公钥生成
*/
// 拿来连个素数(我选择了一个小的, 方便计算)
$sushu1 = 53;
$sushu2 = 59;
// 公钥的两个元素 $n 和 $e
// $e的范围是 (1<$e< ($sushu1-1)*($sushu2-1) )
$n = $sushu2 * $sushu1;
$e = 3;
# $n == 3127
# $e == 3
/**
* ----------------------------------------------
* 私钥生成
*/
// $d 表示私钥
$d = 2 * (($sushu1 - 1)*($sushu2 - 1)) +1;
$d /= $e;
# $d == 2011
/**
* ----------------------------------------------
* 加解密
*/
$str = 'HI v';
/*for( $i = 0;$i<strlen($str); $i++ ){
echo substr($str, $i, 1);
}*/
// 前填充零 & 加密
$arr = array();
for( $i = 0;$i<strlen($str); $i++ ){
$nowStr = substr($str, $i, 1);
$assii = ord($nowStr); // 转换成assii
// echo $assii; 72 73 32 118
// 开始加密
$encrypt = pow($assii, $e); // 当前数字的$e(3)次方
$encrypt = $encrypt % $n; // $n是(素数1*素数2) 取余
array_push( $arr, $encrypt );
}
echo "加密后的字符串数组 : ";
print_r( $arr );
echo "<br>";
echo "解密后 : ";
// 解密
foreach ($arr as $k => $v) {
echo chr( bcmod( bcpow($v, $d), $n ) );
}
?>