重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
問題描述:
創新互聯建站專注于永安企業網站建設,響應式網站,成都商城網站開發。永安網站建設公司,為永安等地區提供建站服務。全流程按需定制,專業設計,全程項目跟蹤,創新互聯建站專業和態度為您提供的服務以下代碼只是實現上訴例子。我將 a和2a...直接計算好存放到數組中。(按照下圖的方法進行計算)
下圖是對課件中例子的手算過程:
本原元是(2,7),私鑰是為7,隨機數為3。輸入的明文一定要在橢圓曲線上,我代碼中沒有關于這個條件的判斷,讀者可以自行加入。截圖中是對13取余,因為題目中說明了E上有13個點。根據題目不同要做相應的修改。
代碼:
#include#include//ECC例題加密解密
//打印菜單
void menu() {
printf("------- ECC算法 --------\n");
printf("------- 1. 加密 --------\n");
printf("------- 2. 解密 --------\n");
printf("------- 0. 退出 --------\n");
}
void encryption_and_decryption(int input){
//提前計算好的a
int a[13][2]={{0,0},{2,7},{5,2},{8,3},{10,2},{3,6},{7,9},{7,2},{3,5},
{10,9},{8,8},{5,9},{2,4}};
int i=0,j=0,k=0,r=0;
//存儲明文
int m[1][2]={0};
//存儲密文
int c1[1][2]={0};
int c2[1][2]={0};
printf("請輸入隨機數r值:");
scanf("%d",&r);//題中為3
printf("請輸入隨機數k值:");
scanf("%d",&k);//題中為7
if(input==1){
//加密算法
printf("請輸入要加密的明文:");
scanf("%d %d",&m[0][0],&m[0][1]);
c1[0][0]=a[r][0];
c1[0][1]=a[r][1];
//查找是幾a
for(i=0;i<13;i++){
if(a[i][0]==m[0][0]&&a[i][1]==m[0][1]){
//例子中j=9
j=i;
break;
}
}
//例子中B為7a,且有13個點
r=(j+k*r) %13;
c2[0][0]=a[r][0];
c2[0][1]=a[r][1];
printf("密文為((%d,%d),(%d,%d))\n",c1[0][0],c1[0][1],c2[0][0],c2[0][1]);
}
else{
//解密算法
printf("請輸入要解密的密文:");
scanf("%d %d %d %d",&c1[0][0],&c1[0][1],&c2[0][0],&c2[0][1]);
for(i=0;i<13;i++){
if(a[i][0]==c1[0][0]&&a[i][1]==c1[0][1]){
//例子中j=3
j=i;
break;
}
}
//加156是為了讓余數為正
r=(((-k)*j)+156)%13;
for(i=0;i<13;i++){
if(a[i][0]==c2[0][0]&&a[i][1]==c2[0][1]){
//例子中j=4
j=i;
break;
}
}
r+=j;
m[0][0]=a[r][0];
m[0][1]=a[r][1];
printf("明文為(%d,%d)\n",m[0][0],m[0][1]);
}
}
void test() {
int input = 0;
do {
menu();
printf("請選擇:->");
scanf("%d", &input);
switch (input)
{
case 1:
encryption_and_decryption(input);
break;
case 2:
encryption_and_decryption(input);
break;
case 0:
printf("已退出加密解密系統\n");
break;
default:
printf("輸入有誤,請重新輸入!\n");
break;
}
} while (input);
}
int main() {
test();
return 0;
}
運行結果截圖:
如果內容對你有幫助,關注我,給我點個小小的贊吧!
若內容有誤,請指正并多多包容,謝謝。
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧