所以,毕竟,我想解释一下方法:
想法是两个人通过公共通信渠道交换一个价值,而不是真正发送它。
这就是它的工作原理:
https://en.wikipedia.org/wiki/Diffie-Hellman
这是我的 C# 代码:
double primemodulus = 251;
double generator = 11;
public string TestarGamaValores()
{
Random R = new Random();
double Alice = R.Next(1, 100); //alice exp
double AliceCalculado = DefaultMod(Alice);
double Bob = R.Next(1, 100); //bob exp
double BobCalculado = DefaultMod(Bob);
//Trocar os calculados entre eles
double ChaveFinalAlice = CalcularAposTroca(Alice, BobCalculado);
double ChaveFinalBob = CalcularAposTroca(Bob, AliceCalculado);
return ("Chave Final Alice: " + ChaveFinalAlice + " Chave Final Bob: " + ChaveFinalBob);
}
//Calculate after exchange
public double CalcularAposTroca(double MyExp, double HisResultFromHisModulus)
{
double genrt = Math.Pow(HisResultFromHisModulus, MyExp);
double Chave = genrt % primemodulus;
return Chave;
}
public double DefaultMod(double MyExp)
{
double genrt = Math.Pow(generator, MyExp);
double Chave = genrt % primemodulus;
return Chave;
}
唯一的问题是,我无法使值相同。如果公式没问题,我已经研究过,我想我没有弄错,但 C# 代码似乎不同意。
结果确实在 0 到 251 之间,但总是不同。
那我做错了什么?
C#代码可以吗?