shell实现rsa算法青春版

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"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值