Playfair加密算法和RSA加密算法介绍

本文详细介绍了Playfair和RSA两种加密算法的原理及步骤。Playfair加密涉及5x5密码表的构建和明文的整理,通过特定规则进行加密解密。RSA算法则基于大素数和欧拉函数,通过公钥和私钥进行加密解密,展示了乘法同态特性。并提供了Python实现示例。
摘要由CSDN通过智能技术生成

Playfair加密算法

加密:1.编制密码表 2.整理明文 3.编写密文

解密:1.整理密文 2.编写明文

加密:

1.编制密码表

第一步是编制密码表。在5*5的密码表中,共有55列字母。第一列(或第一行)是密钥,其余按照字母顺序。密钥是一个单词或词组,若有重复字母,可将后面重复的字母去掉如果密钥过长可占用第二列或行例如:playfair

构造密码表:playfir(重复字母a省略)

A B C D E F G H I/J K L M N O P Q R S T U V W X Y Z

PLAYF
I/JRBCD
EGHKM
NOQST
UVWXZ

2.整理明文

第二步整理明文。将明文每两个字母组成一对。如果成对后有两个相同字母紧挨或最后一个字母是单个的,就插入一个字母X(或者Q)

明文:my name is kara

整理明文:my na me is ka ra

3.编写密文

明文加密规则:

  • 若p1 p2在同一行,对应密文c1 c2分别是紧靠p1 p2 右端的字母。其中第一列被看做是最后一列的右方。
  • 若p1 p2在同一列,对应密文c1 c2分别是紧靠p1 p2 下方的字母。其中第一行被看做是最后一行的下方。
  • 若p1 p2不在同一行,不在同一列,则c1 c2是由p1 p2确定的矩形的其他两角的字母(至于横向替换还是纵向替换要事先约好,或自行尝试)。
     

所以按照上述规则:my---->kf   na---->qp  me---->eg   is---->cn   ka---->hy   ra---->bl

即密文为:KFQPEGCNHYBL

解密:

密文解密规则如下:

  • 若c1 c2在同一行,对应明文p1 p2分别是紧靠c1 c2 左端的字母。其中最后一列被看做是第一列的左方。
  • 若c1 c2在同一列,对应明文p1 p2分别是紧靠c1 c2 上方的字母。其中最后一行被看做是第一行的上方。
  • 若c1 c2不在同一行,不在同一列,则p1 p2是由c1 c2确定的矩形的其他两角的字母

上述密文:KFQPEGCNHYBL

两两分组为:KF QP EG CN HY BL

按照上述规则:KF---->MY  QP---->NA   EG---->ME   CN---->IS/JS   HY---->KA   BL---->RA

整合为:my name is kara

与明文相符,所以检验加密成功!

RSA加密算法

加密:1.生成密钥(公钥、私钥)  2.公钥加密明文

解密:私钥解密密文

加密:

1.生成密钥:

  1. 随机找两个质数 P 和 Q ,P 与 Q 越大,越安全;
  2. 计算他们的乘积 n = P * Q
  3. 计算 n 的欧拉函数 φ(n):φ(n)= (P - 1)(Q - 1)
  4. 随机选择一个整数 e,条件是 1< e < φ(n),且 e 与 φ(n) 互质
  5. 计算e对于 φ(n) 的模反元素d,可以使得 e*d 除以 φ(n) 的余数为 1                               (1<d<e,且e*d mod φ(n) = 1 ) 即:d=e^-1 ( mod φ(n) )
  6.  公钥(n,e);私钥(n,d)

例如:

  1. 任取两个质数p=3,q=11
  2. 计算乘机n=p*q=3*11=33
  3. 计算欧拉函数φ(n)= (p - 1)(q - 1)=2*10=20
  4. 任选质数e,其范围为1<e<20,此时选取e=3
  5. 计算d,e*d mod φ(n)=1,所以将e=3,φ(n)=20代入,即3*d mod 20=1,求得d=7.
  6. 公钥(33,3),私钥(33,7)

2.公钥加密明文:

假设明文m=7,公钥加密

密文c=m^e%n=7^3%33=343%33=13

解密:

私钥解密:m=c^d%n=13^7%33=62748517%33=7

与明文7相等,所以检验成功!

扩展:rsa加密算法属于乘法同态算法,即明文m1,m2加密后的密文c1,c2可以做乘法运算,乘积可以被解密:

例如:在python中,可以通过调用rsa库来进行检验

#coding:utf-8
import rsa
import rsa.core
(public_key, private_key) = rsa.newkeys(512)#随机生成公钥私钥
c1 = rsa.core.encrypt_int(2, public_key.e, public_key.n)#对明文2进行公钥加密
print("明文2的密文为:",c1)
c2 = rsa.core.encrypt_int(3, public_key.e, public_key.n)#对明文3进行公钥加密
print("明文3的密文为:",c2)
c3=c1*c2#乘法同态,对密文进行乘法运算
print("密文乘积为:",c3)
decrypto = rsa.core.decrypt_int(c3, private_key.d, public_key.n)#对密文乘积c3进行私钥解密
print("密文乘积解密结果为:",decrypto)

结果为6,与明文乘积一致。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值