我为密码学Deffie Hellman创建了这个基本程序。我希望s是随机生成的素数,q是随机生成的整数。 sk1和sk2是共享密钥,也是随机生成的。 pk1和pk2是模数计算值,我必须证明它们彼此相等。我认为我的公式是正确的,但我不知道如何打印s,q,sk1,sk2,pk1和pk2的值来验证我的要求。我的代码粘贴在下面,如果有人能帮我打印报表,我真的很感激。
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;
import java.util.Random;
import java.math.*;
/**
*
* @author Hash
*/
public class DH {
public static void main(String [] arg) {
int s, q;
double sk1, sk2, pk1 = 0, pk2 = 0;
Random generator = new Random();
s = generator.nextInt(50000);
q = generator.nextInt(50000);
sk1 = generator.nextInt();
sk2 = generator.nextInt();
if(s==1 || s==2) {
for(int i = 2; i< (int)(s/2); i++) {
if(s/i != (int)(s/i)) {
double a= Math.pow(q,sk1);
pk1 = a%s;
double b= Math.pow(q, sk2);
pk2 = b%s;
if(pk1==pk2) {
System.out.println("true");
}
System.out.println(s);
System.out.println(q);
System.out.println(sk1);
System.out.println(sk2);
System.out.println(pk1);
System.out.println(pk2);
}
}
}
}
}
答案 0 :(得分:1)
您的打印声明属于您的if情况。你考虑过s != 1 or s != 2
吗?
package javaapplication1;
import java.util.Random;
import java.math.*;
public class DH {
public static void main(String [] arg) {
int s, q;
double sk1, sk2, pk1 = 0, pk2 = 0;
Random generator = new Random();
s = generator.nextInt(50000);
q = generator.nextInt(50000);
sk1 = generator.nextInt();
sk2 = generator.nextInt();
if(s==1 || s==2) {
for(int i = 2; i< (int)(s/2); i++) {
if(s/i != (int)(s/i)) {
double a= Math.pow(q,sk1);
pk1 = a%s;
double b= Math.pow(q, sk2);
pk2 = b%s;
if(pk1==pk2) {
System.out.println("true");
}
}
}
}
System.out.println(s);
System.out.println(q);
System.out.println(sk1);
System.out.println(sk2);
System.out.println(pk1);
System.out.println(pk2);
}
}
答案 1 :(得分:1)
如果if(s/i != (int)(s/i))
,你只会做任何事情。由于s
和i
都是整数,因此这种情况不可能真实。
(澄清:“不太可能”,我的意思是这个条件不可能是真的。s/i
返回一个整数,(int)(s/i)
将返回完全相同的整数。)
答案 2 :(得分:1)
由s生成的整数:
s = generator.nextInt(50000);
有25,000比1的机会:
if(s==1 || s==2) {
永远都是真的。 也许你的意思是s&gt; 2?
答案 3 :(得分:0)
不要使用浮点算术来进行加密。特别是对于取幂,你需要比double
更精确的结果。请改用BigInteger
。
在测试时,每次都不应使用“新”随机数。请改用new Random(0)
,以便下次启动调试器时可以重现计算。
您如何保证s
是素数?我无法从代码中看到它。
请正确且一致地缩进代码。 由于您使用的是Eclipse,所以您需要做的就是按Ctrl-Shift-F一次。