91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 3KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2024-01-28
  • 語(yǔ)言: C/C++
  • 標(biāo)簽: C++??

資源簡(jiǎn)介

使用c++實(shí)現(xiàn)hill密碼的加密解密以及破譯,代碼可即時(shí)運(yùn)行。 代碼詳述:代碼有兩個(gè)文件,第一個(gè)文件用于加密解密,第二個(gè)文件用于破譯,均可由用戶即時(shí)輸入,交互性好。

資源截圖

代碼片段和文件信息

#include
#include
#include
using?namespace?std;
int?gcd(int?aint?b)
{
????while(b?!=?0)
????{
????????int?r?=?b;
????????b?=?a%b;
????????a?=?r;
????}
????return?a;
}?
int?math(int?a)
{
if(a<0)
{
for(int?i=1;;i++)
{
a=a+26;
if(a>=0&&a<26)
break;
}
}
else
for(int?i=0;;i++)
{
if(a>=0&&a<26)
break;
a=a-26;
}

return?a;
}
int?main()
{
int?matrix[2][2];//matrix[2][2]為加密矩陣
int?dtplen;//dt為行列式的值,flag是明(文)長(zhǎng)度的奇偶標(biāo)志,0為偶數(shù),1為奇數(shù)
cout<<“請(qǐng)輸入明文長(zhǎng)度:“;
cin>>len;
cout<<‘\n‘<<“請(qǐng)輸入明文:“;
char?*pla=new?char[len];//plaz指向用戶輸入的明文(26個(gè)字母組成)
int?*tran1=new?int[len];//tran1指向明文對(duì)應(yīng)的數(shù)字組成的數(shù)組
char?*ciph=new?char[len];//ciph指向密文
int?*s=new?int[len];//s指向密文數(shù)字?jǐn)?shù)組
for(int?i=0;i cin>>pla[i];
//隨機(jī)生成一個(gè)對(duì)模為26可逆的二階矩陣
do
{
matrix[0][0]=rand()%26;
matrix[0][1]=rand()%26;
matrix[1][0]=rand()%26;
matrix[1][1]=rand()%26;
dt?=?-1;
for(p=1;?dt? {
dt?=?((matrix[0][0]?*?matrix[1][1]?-?matrix[0][1]?*?matrix[1][0])?+?26?*?p)%26;?//行列式的值?
}
}while(dt%2==0||dt%13==0);
cout<<‘\n‘<<“加密矩陣為:“<<‘\n‘< //判斷輸入明文的長(zhǎng)度是否為偶數(shù)
if(len?%?2?==?1)?
?{
pla[len]?=?‘a(chǎn)‘;
len?=?len+1;
?}
//將明文里的字母轉(zhuǎn)化為對(duì)應(yīng)的數(shù)字(要區(qū)分大小寫大寫字母要先轉(zhuǎn)換為小寫字母)
for(i=0;?i {
if(pla[i]?>=?‘A‘?&&?pla[i]?<=?‘Z‘)
{
pla[i]?=?pla[i]?+?32;
}
if(pla[i]?>=?‘a(chǎn)‘?&&?pla[i]?<‘z‘)
tran1[i]=pla[i]-‘a(chǎn)‘+1;
else
tran1[i]=0;
}
//以兩個(gè)為一組,一次加密
for(i=0;?i {
s[i]=(tran1[i]*matrix[0][0]+tran1[i?+?1]*matrix[0][1])%26;
s[i?+?1]?=?(tran1[i]?*matrix[1][0]?+?tran1[i?+?1]?*?matrix[1][1])?%?26;
????}
//把加密后的數(shù)字?jǐn)?shù)組轉(zhuǎn)化為字母(不區(qū)分大小寫)
cout<<“密文:“<<‘\n‘;
for(i=0;?i {
if(s[i]!=0)
ciph[i]?=?s[i]?+?‘a(chǎn)‘-1;
else?ciph[i]=‘z‘;
cout<<(char)ciph[i]<<‘\t‘;
}

//求矩陣的逆
int?det?=?-1invdet;//invdet為加密矩陣模的倒數(shù)
int?matrix2[2][2];//matrix2[22]為解密矩陣
int?*mes=new?int[len];//mes指向解密后的明文對(duì)應(yīng)的數(shù)字?jǐn)?shù)組
char?*ciph2=new?char[len];//ciph2指向解密后的明文
????/*for(i=0;?det? {
det?=?((matrix[0][0]?*?matrix[1][1]?-?matrix[0][1]?*?matrix[1][0])+i*26)%26;
}
i=1;*/
while(i++)
{
if((dt*i)%26==1)
{
invdet=i;
break;
}
}
????/*i?=?1;
????while(1)
{
if((det?*?i)?%?26?==?1)
{
invdet=i;
break;
????????}
else
i++;
}*/
//逆矩陣
????int?temp=(matrix[1][1]*invdet);
matrix2[0][1]=(-1?*?matrix[0][1])?*?invdet;
????matrix2[1][0]=(-1?*?matrix[1][0])?*?invdet;
????matrix2[1][1]=(matrix[0][0]*invdet);
matrix2[0][0]=temp;
matrix2[0][0]=math(matrix2[0][0]);
matrix2[0][1]=math(matrix2[0][1]);
matrix2[1][0]=math(matrix2[1][0]);
matrix2[1][1]=math(matrix2[1][1]);
????//?得到解密后結(jié)果
cout<<‘\n‘<<“解密矩陣:“<<‘\n‘<????for(i=0;?i {
mes[i]?=?(s[i]?*?matrix2[0][0]?+?s[i?+?1]?*?matrix2[0][1])?%?26;
mes[i?+?1]?

?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-06-07?08:33??Hill密碼\
?????文件????????3486??2019-06-06?17:58??Hill密碼\hiil密碼加密解密.cpp
?????文件????????3918??2019-06-06?17:56??Hill密碼\hill密碼破譯.cpp

評(píng)論

共有 條評(píng)論