我正在尝试使用加法重新创建 Diffie-Hellman 密钥交换,但出现错误
I'm trying to recreate the Diffie-Hellman Key Exchange using addition but i get errors
#include<stdio.h>
#include<math.h>
long long int add(long long int a, long long int b,
long long int G)
{
if (b == 1)
return a;
else
return (((long long int)(a + b)) % G);
}
int main()
{
long long int G, x, a, y, b, ka, kb;
G = 43; //the agreed number
printf("The value of G : %lld\n\n", G);
a = 23; //private key for a
printf("The private key a for A : %lld\n", a);
x = add(G, a); //gets the generated key
b = 19; //private key for b
printf("The private key b for B : %lld\n\n", b);
y = add(G, b); // gets the generated key
ka = add(y, a, G); // Secret key for a
kb = add(x, b, G); // Secret key for b
printf("Secret key for the A is : %lld\n", ka);
printf("Secret Key for the B is : %lld\n", kb);
return 0;
}
this is the flow of the code
这是预期的 OUTPUT/FLOW 程序,但我的代码有问题我附上了一张图片来显示问题。
A 和 B 将商定一个数字
G = 43为约定数
A会生成一个私密号a = 23
B会生成一个私人号码b = 19
A 将计算 G=43 + a=23 mod G=43 OR 43 + 23 mod 43 = 66(我们称它为 x)x = 66
B 将计算 G=43 + b=19 mod G=43 OR 43+19mod43 = 62(我们称它为 y)y = 62
对于 A 我们得到 x = 66
对于 B,我们得到 y = 62
然后他们将交换 x 和 y
x = 66 会去 B
y = 62 将转到 A
A 现在将计算 y + a mod G OR 62+23 mod 43 = 85 (秘密数字是 ka) ka = 85
B 现在将计算 x + b mod G OR 66+19 mod 43 = 85 (秘密数字是 kb) kb = 85
This is the error that I get
您的 'add' 函数被声明为接受 3 个参数
long long int add(long long int a, long long int b, long long int G)
但是你两次尝试调用它只传递 2,这里
x = add(G, a); //gets the generated key
这里
y = add(G, b); // gets the generated key
阅读你发布的逻辑应该是
x = add(G, a, G); //gets the generated key
和
y = add(G, b, G); // gets the generated key
#include<stdio.h>
#include<math.h>
long long int add(long long int a, long long int b,
long long int G)
{
if (b == 1)
return a;
else
return (((long long int)(a + b)) % G);
}
int main()
{
long long int G, x, a, y, b, ka, kb;
G = 43; //the agreed number
printf("The value of G : %lld\n\n", G);
a = 23; //private key for a
printf("The private key a for A : %lld\n", a);
x = add(G, a); //gets the generated key
b = 19; //private key for b
printf("The private key b for B : %lld\n\n", b);
y = add(G, b); // gets the generated key
ka = add(y, a, G); // Secret key for a
kb = add(x, b, G); // Secret key for b
printf("Secret key for the A is : %lld\n", ka);
printf("Secret Key for the B is : %lld\n", kb);
return 0;
}
this is the flow of the code
这是预期的 OUTPUT/FLOW 程序,但我的代码有问题我附上了一张图片来显示问题。
A 和 B 将商定一个数字
G = 43为约定数
A会生成一个私密号a = 23
B会生成一个私人号码b = 19
A 将计算 G=43 + a=23 mod G=43 OR 43 + 23 mod 43 = 66(我们称它为 x)x = 66
B 将计算 G=43 + b=19 mod G=43 OR 43+19mod43 = 62(我们称它为 y)y = 62
对于 A 我们得到 x = 66
对于 B,我们得到 y = 62
然后他们将交换 x 和 y
x = 66 会去 B
y = 62 将转到 A
A 现在将计算 y + a mod G OR 62+23 mod 43 = 85 (秘密数字是 ka) ka = 85
B 现在将计算 x + b mod G OR 66+19 mod 43 = 85 (秘密数字是 kb) kb = 85
This is the error that I get
您的 'add' 函数被声明为接受 3 个参数
long long int add(long long int a, long long int b, long long int G)
但是你两次尝试调用它只传递 2,这里
x = add(G, a); //gets the generated key
这里
y = add(G, b); // gets the generated key
阅读你发布的逻辑应该是
x = add(G, a, G); //gets the generated key
和
y = add(G, b, G); // gets the generated key