Итак, в конце концов, я хочу объяснить метод:
Идея состоит в том, чтобы два человека обменивались одной ценностью через общедоступный канал связи, фактически не отправляя ее.
Вот как это работает:
https://en.wikipedia.org/wiki/Диффи-Хеллман
Это мой код С#:
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, но всегда разные.
так что я делаю неправильно?
код С# в порядке?