RSA加密
1、A选择两个极大素数p,q;
2、A计算n=pq;
3、A计算n的欧拉函数=(p的欧拉函数)*(q的欧拉函数)=(p-1)(q-1);
4、A选择一个与(n的欧拉函数)互质并且小于(n的欧拉函数)的数e;
5、A计算出e对于(n的欧拉函数)的模反元素d;
6、自此(e,n)为公钥,(d,n)为私钥;
7、设有明文M,则加密为 (M的e次方)mod n=C 其中C为加密后的密文;
8、解密为:(C的d次方)mod n=M;
加密代码青春版
#! /bin/bash
# //第一步,取两个素数p,q
echo 请输入p,q值,输入一个回车一下
read p
read q
# //第二步,计算n值
n=`expr $p \* $q`
# //第三步,计算φ(n)
pp=`expr $p - 1`
qq=`expr $q - 1`
phin=`expr $pp \* $qq`
# //第四步,计算e值并选择
a=$phin
b=1
echo 你可以使用以下的e值,选择并输入
for (( ; b<a; b++))
do
k=$b
l=$a
while [ $k -ne 0 ]
do
t=`expr $l % $k`
l=$k
k=$t
if [ $l -eq 1 ]
then
echo $b
fi
done
done
read e
echo 你的公钥是e="$e",n="$n"
# //输入明文
echo 请输入明文
read M
# //计算加密文件
C=1
x=$e
y=1
count=0
for (( ; y<=e; y++))
do
C=`expr $C \* $M`
done
C=`expr $C % $n`
echo 你的密文是"$C"
# /计算私钥
echo 你的私钥n="$n",你的私钥d如下
for (( d=2; d<phin; d++))
do
xxx=`expr $d \* $e % $phin`
if [ $xxx -eq 1 ]
then
echo $d
fi
done
解密代码青春版
#! /bin/bash
echo 请输入密文
read C
echo 请输入密钥 d n
read d
read n
x=$d
y=1
M=1
for ((; y<=d; y++))
do
M=`expr $M \* $C`
done
M=`expr $M % $n`
echo 你的明文是 "$M"