希尔加密法matlab,希尔密码加密解密

希尔密码加密解密原理:

希尔密码是运用基本矩阵论原理的替换密码。每个字母当作26进制数字:A=0,B=1…一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果MOD 26。注意用作加密的矩阵(即密钥)必须是可逆的,否则就不可能译码。只有矩阵的行列式和26互质,才是可逆的。

例如:设分组长度n=2,密钥为:K={7,9;8,3},明文为:friday

加密过程为:

(1)将明文分为两两一组(因为n=2):fr,id,ay

(2)将明文字母转换为对应的明文编码:(5,17),(8,3),(0,24)

(3)分别计算每一组明文对应的密文编码:

(5,17)*K mod 26 =(15,16)

(8,3) *K mod 26=(2,5)

(0,24) *K mod 26=(10,20)

(4)将密文编码转换为对应的密文字母,即pq,cf,ku

解密过程为:

(1)将密文分为两两一组:pq,cf,ku

(2)将密文字母转换为对应的编码:(15,16),(2,5),(10,20)

(3)分别计算每一组密文对应的明文编码(K-1位K的逆矩阵)

(15,16)*K-1 mod 26 =(5,17)

(2,5) *K -1mod 26=(8,3)

(10,20) *K-1 mod 26=(0,24)

(4)将明文编码转换为明文字母,完成解密。

因此有上述可知,主要计算过程为矩阵相乘和求一个矩阵的逆矩阵。下面程序为逆矩阵的求法,矩阵相乘比较简单。

//逆矩阵求法

#include

using namespace std;

int n;

double a[100][100];

double calc()

{

int i, j, k;

double p;

for (i = 0; i < n; i++)

{

for (j = i + 1; j < n; j++)

{

p = a[j][i] / a[i][i];

for (k = i; k < n; k++)

{

a[j][k] -= a[i][k] * p;

}

}

}

double s = 1.0;

for (i = 0; i < n; i++)

s *= a[i][i];

return s;

}

int main()

{

scanf("%d", &n);

int i, j;

for (i = 0; i < n; i++)

{

for (j = 0; j < n; j++)

{

scanf("%lf", &a[i][j]);

}

}

printf("%lf\n", calc());

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值