3

我正在实现一个使用大量数字的加密算法,因此在制作 Java 应用程序时,我必须使用 BigInteger 类。

但是,当我尝试在 android 应用程序中实现相同的构造函数时

public BigInteger(int bitLength,int certainty,Random rnd), 

没有生成随机 BigInteger(一次又一次生成相同的整数 35879 :P)。在一个简单的 java 应用程序中成功生成了一个随机 BigInteger。

作为参考,

http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html#constructor_detail

另外,如果我导入 java.util.* 形式的东西,请告诉我,它是否可以在任何 android 应用程序中工作?

如果 Android 不支持 BigInteger 或存在与支持的类似的任何其他类,请发表您的意见???

这里方法 systemoutprintln() 用于将相应的字符串打印到布局中。

这是供您参考的代码,

public class keyGenerator {

/**
 * @param args the command line arguments
 */

  static  Vector check = new Vector();


  static protected BigInteger p= new BigInteger("161");
  static protected BigInteger q= new BigInteger("47");
  static protected Random s =new Random();
  static protected BigInteger n = new BigInteger("1");
  static protected BigInteger trails;
  static protected BigInteger lambda ;
  static protected BigInteger nsq  = new BigInteger("1");
  static protected BigInteger g = new BigInteger("1");
  static protected BigInteger temp = new BigInteger("1");
  static protected long timetkn;
  static protected View myview;
  static protected String[] printarray = new String[1000];
  static protected int ii=0;

static protected int maxbit;
private static BigInteger two = new BigInteger("2");

public keyGenerator() {

  //  Activity activity = new Activity();
// et.append("Second Part!!");
// EditText et = (EditText)activity.findViewById(R.string.second);
//    et.append("Working");


    long keyStart = SystemClock.uptimeMillis();
    p = new BigInteger(7,1,s);

            Systemoutprintln("Assumed p :" +p.toString());
  /*  while(!isPrime(p) && ( (p.compareTo(two)==1) || (p.compareTo(two))==0) )
    {
            p = new BigInteger(7,1,s);

    Systemoutprintln(p.toString());
    }*/


    Systemoutprintln("Assumed q :" +p.toString());
    q = new BigInteger(7,1,s);
4

2 回答 2

3

如果您查看文档,您会发现您正在调用的构造函数中的 rand 参数未使用。

Implementation Note: the Random argument is ignored. This implementation uses OpenSSL's bn_rand as a source of cryptographically strong pseudo-random numbers.

Perhaps remove it and supply null as the argument, or remove the certainty argument, in which case it will use your Random object (according to the docs.)

于 2012-11-12T21:26:59.277 回答
2

根据Random numbers上的 java 文档,这应该有效。但是,我注意到您使用两个不同的标签打印了两次 bigInteger p。您是否有可能将它们混合在一起?

编辑:在digitaljoel的帮助下,我发现了这个先前的任务:

是否有与 OpenSSL 的 bn_rand_range 等效的 java?

本质上,您应该使用 SecureRandom,并使用那里给出的方法,即:

Random r = new SecureRandom();    
BigInteger q = something_big;
BigInteger ans;

do
    BigInteger(bits_in_q, r);
while (ans > q)
于 2012-11-12T21:24:06.990 回答