Rabin加密算法

本文介绍了Rabin加密算法,包括其基于模平方和平方根的工作原理,加密过程(使用大素数p、q生成n并进行加密),以及解密方法(涉及扩展欧几里得算法和孙子定理)。特别强调了其效率和解决多重对应问题的策略。
摘要由CSDN通过智能技术生成

 

一、Rabin加密算法

Rabin算法是一种基于模平方和模平方根的非对称加密算法

(称a为x 的算术平方,称x为a的算术平方根)

(称a为x模m时的平方,称x为模m时的平方根)

 

1.加密

公式为:C=m2mod n ,其中C为密文,m为明文.随机取两个大素数p、q,满足p≡q≡3mod4 ,即这两个素数形式为4k+3,计算n=pq,以n作为公钥,p、q作为私钥。

            String sn = 442454454344642494;
            //明文
            BigInteger m=new BigInteger(sn);
            //取两个大素数,设置密钥p、q的值
            BigInteger p = new BigInteger("199999900000000099");
            BigInteger q = new BigInteger("199999900000000171");
            //算出n的值
            BigInteger n = p.multiply(q);

            //加密
            BigInteger f=m.pow(2);
            BigInteger c=f.mod(n);
            //得到密文
            String result=c.toString();

2.解密

解密:在已知私钥p和q时求密文,  , ,在p≡q≡3mod4 时,  ,接着根据辗转相除法得出   ,使其满足: ,最后根据孙子定理,最后计算出的明文为:

值得注意的是该加密函数并不是一个单射,对于任意的一个密文,有四个可能的明文与之对应,根据校验码可以在明文空间中取得真正的明文,或者在密文前面添加时间戳等方法进行明文校验。求解x2≡C mod n 与分解n是等价的,所以破译Rabin密码的困难程度等价于大整数分解的困难问题。


总结

Rabin加密算法的效率非常高,因为仅需一次mod平方运算,但是缺点是接收者需要从四种可能的情况下选择一个正确的明文,这种不确定问题可以通过预先增加定义原始明文消息冗余来解决(例如,复制对应的比特位在固定位置,或者在明文前面添加时间戳,或者添加特定字符串在固定位置)明文消息中仅有一个符合冗余规则,即可辨认原始明文消息,也可以解决一个密文对于多个明文的问题。解密所需的算法还有扩展欧几里得算法,以及孙子定理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值