cryptography-affine cipher

仿射密码Affine Cipher

加密如下
C = E 11 , 23 ( M ) = 11 M + 23 ( m o d 26 ) C=E_{11,23}(M)=11M+23 (mod 26) \\ C=E11,23(M)=11M+23(mod26)

解密如下
D X , 23 C = X ( C − 23 ) ( m o d 26 ) 11 X m o d    26 = 1 D_{X,23}C=X(C-23)(mod 26) \\ 11X\mod26 = 1 DX,23C=X(C23)(mod26)11Xmod26=1
扩展欧几里得算法(extended Euclidean algorithm)

//applied to affine cipher
#include<stdio.h>
int main()
{
	//ax mod 26 == 1
	//ax + by = 1
	int a,b;
	int x1,x2,x3,y1,y2,y3;
	int temp1,temp2,temp3;
	int q;
	
	printf("input a:");
	scanf("%d",&a);
	fflush(stdin);
	printf("input b:");
	scanf("%d",&b);
	fflush(stdin);
	
	x1 = 1;
	x2 = 0;
	x3 = a;
	y1 = 0;
	y2 = 1;
	y3 = b;
	printf("%d\n",11 / 26);
	printf("q	x1	x2	x3	y1	y2	y3\n");
	printf("---------------------------------------------------\n");
	printf("NONE	%3d	%3d	%3d	%3d	%3d	%3d\n",x1,x2,x3,y1,y2,y3);
	
	while(y3 != 0)
	{
		q = x3 / y3;
		temp1 = x1;
		temp2 = x2;
		temp3 = x3;
		x1 = y1;
		x2 = y2;
		x3 = y3;
		y1 = temp1 - q * y1;
		y2 = temp2 - q * y2;
		y3 = temp3 - q * y3;
		
		printf("%3d	%3d	%3d	%3d	%3d	%3d	%3d\n",q,x1,x2,x3,y1,y2,y3);
	}
	
	printf("%dx mod 26 == 1 \n",a);
	printf("%dx +%dy == 1 \n",a,b);
	printf("x == %d \n y==%d\n",x1,x2);
	printf("gcd(%d,%d) == %d\n",a,b,x3);
	
	getchar();
	return 0;
}

输入
input a:11
input b:26

输出
q       x1      x2      x3      y1      y2      y3
---------------------------------------------------
NONE      1       0      11       0       1      26
  0       0       1      26       1       0      11
  2       1       0      11      -2       1       4
  2      -2       1       4       5      -2       3
  1       5      -2       3      -7       3       1
  3      -7       3       1      26     -11       0
11x mod 26 == 1
11x +26y == 1
x == -7
 y==3
gcd(11,26) == 1

-7 mod 26 = 19

所以,X=19。

a- 0    b- 1    c- 2    d- 3    e- 4
f- 5    g- 6    h- 7    i- 8    g- 9
k-10    l-11    m-12    n-13    o-14
p-15    q-16    r-17    s-18    t-19
u-20    v-21    w-22    x-23    y-24
z-25

eg,M=‘s’=18.

C = E 11 , 23 ( 18 ) = 11 × 18 + 23 = 13 m o d &ThinSpace;&ThinSpace; 26 C=E_{11,23}(18)=11\times 18+23 = 13 \mod 26 C=E11,23(18)=11×18+23=13mod26

D 19 , 23 ( 13 ) = 19 × ( 13 − 23 ) = 18 m o d &ThinSpace;&ThinSpace; 26 D_{19,23}(13)=19\times (13-23)=18 \mod 26 D19,23(13)=19×(1323)=18mod26

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值