xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

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

資源簡介

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

資源截圖

代碼片段和文件信息

#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是明(文)長度的奇偶標志,0為偶數(shù),1為奇數(shù)
cout<<“請輸入明文長度:“;
cin>>len;
cout<<‘\n‘<<“請輸入明文:“;
char?*pla=new?char[len];//plaz指向用戶輸入的明文(26個字母組成)
int?*tran1=new?int[len];//tran1指向明文對應的數(shù)字組成的數(shù)組
char?*ciph=new?char[len];//ciph指向密文
int?*s=new?int[len];//s指向密文數(shù)字數(shù)組
for(int?i=0;i cin>>pla[i];
//隨機生成一個對模為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‘< //判斷輸入明文的長度是否為偶數(shù)
if(len?%?2?==?1)?
?{
pla[len]?=?‘a(chǎn)‘;
len?=?len+1;
?}
//將明文里的字母轉(zhuǎn)化為對應的數(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;
}
//以兩個為一組,一次加密
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ù)字數(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指向解密后的明文對應的數(shù)字數(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]?

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????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

評論

共有 條評論