-1
public class A{

    long set_time,ext_time,ident_time;
    long set_time2,ext_time2,ident_time2;
    BigInteger p,q,phiN,e,d,modu;
    KeyPairGenerator keygen;
    KeyPair keypair;
    RSAPublicKey publicKey;
    RSAPrivateCrtKey privateKey;
    MessageDigest H,G;
    String TM;

    public void Setup(int k)
    {
         SecureRandom random = new SecureRandom();
         try
         {
            set_time2 = System.nanoTime();

            keygen = KeyPairGenerator.getInstance("RSA");
            keygen.initialize(k, random);
            keypair = keygen.genKeyPair();
            privateKey = (RSAPrivateCrtKey)keypair.getPrivate();
            publicKey = (RSAPublicKey)keypair.getPublic();

            p = privateKey.getPrimeP();
            q = privateKey.getPrimeQ();
            phiN = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
            e = privateKey.getPublicExponent();
            modu = privateKey.getModulus();
            d = e.modInverse(phiN);

            set_time = System.nanoTime() - set_time2;  

         }
         catch(Exception e){
            System.out.println("\nError in Setup: " + e.getMessage());
        }

    }
    public BigInteger getModu()
    {
        System.out.println(modu);
        return modu;
    }


    public static void main(String[] args)throws Exception {
       A callpkg = new A();
       callpkg.Setup(2048);     
       callpkg.getModu();
       B callchild = new B();
       callchild.KeyDer();
    }
}

public class B extends A{

    long set_time,ext_time,ident_time;
    long set_time2,ext_time2,ident_time2;
    BigInteger id_hash,N,x,t,bigT,c,s;
    MessageDigest H,G;
    String TM;
    String ID = "email", M="Hello world";

    public void KeyDer()
    {
         try
         {                        
                SHIBS abc = new Function();
                ext_time2 = System.nanoTime();

                H = MessageDigest.getInstance("SHA-512");
                H.update(ID.getBytes());
                id_hash = new BigInteger(H.digest());
                A call = new A();
                BigInteger aaa = call.getModu();
                System.out.println(aaa);
                N = privateKey.getModulus();
                x = id_hash.modPow(d, N);

                ext_time = System.nanoTime() - ext_time2;
         }
         catch(Exception e){
            System.out.println("\nError in KeyDer: " + e.getMessage());
        }
    }
}

我是编程新手。第一次在互联网上发帖,很抱歉在 System.out.println("\nKeyDer 中的错误:" + e.getMessage()); 我需要使用 N = privateKey.getModulus(),所以我必须调用 privateKey.getModulus() 或获取变量 N。

4

2 回答 2

0

你从来没有调用过你的setup()方法。
因此,您的所有字段都是null.

于 2013-08-16T00:36:56.687 回答
0

您正在创建一个实例A并调用 setup - 这很好。

然后您将创建一个扩展 A 的 B 实例。此扩展与首先创建的实例不同。所以有两个选择:

  1. 在您的方法 中调用setup()您的 B 实例main

    B callchild = new B();
    callchild.Setup((2048);     
    callchild.getModu();
    callchild.KeyDer();
    
  2. 在构造函数中B添加调用setup()

编辑以下对原始帖子有效

privateKey是 A 类方法setup()的局部变量;

制作变量RSAPrivateCrtKey privateKey或变量

BigInteger p,q,phiN,e,d,modu; 

具有类范围,即在设置之外定义它们并确保您调用setUp()

于 2013-08-16T00:38:59.347 回答