2016-12-14 17 views
-1

RSA鍵ペアのサイズを1024から2048にアップグレードしようとしています。ここでサンプルコードを提供します。 1024符号化された文字列(RSA公開鍵)からRSAパラメータ(モジュラスと指数)を抽出する

私のコードの最初のステップは、.NETアプリケーション .NETアプリケーション内に渡さ今すぐJavaコード

try { 
     // Generate Public & Private Keys 
     KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); 
     kpg.initialize(1024); 
     KeyPair keyPair = kpg.genKeyPair(); 

     RSAPublicKey key = (RSAPublicKey) keyPair.getPublic(); 
     System.out.println("Modulus"); 
     System.out.println(key.getModulus()); 


     String publicKey = encode(key.getModulus().toByteArray()) + encode(key.getPublicExponent().toByteArray()); 


     // Build the Signature 
     Signature sig = Signature.getInstance("SHA256withRSA"); 
     sig.initSign(keyPair.getPrivate()); 
     seedData = seedData + "ABC"; 

     sig.update(seedData.getBytes("UTF-8")); 
     String signature = encode(sig.sign()); 

     signatureString.append(signature); 
     // Embed the public key in the signature 
     int publicKeyLocation = signatureString.charAt(signatureString.length() - 2) % 40; 
     // Add some random bytes at the end 
     int randomBytesToAdd = signatureString.charAt(signatureString.length() - 10) % 9; 
     System.out.println("Random bytes to add"); 
     System.out.println(randomBytesToAdd); 
     System.out.println("Adding Random bytes that are:"); 
     String s = randomString(randomBytesToAdd); 
     signatureString.insert(publicKeyLocation, s); 
    } catch (Exception e) { 

    } 

    return signatureString.toString(); 
} 

にこのエンコードされた文字列を使用して署名を構築することです 私は1024年から鍵ペアのサイズを変更する場合は、公開鍵と署名

protected RSAParameters GetPublicKey(string encodedString) 
    { 
     int bytesToSkip = encodedString.Substring((encodedString.Length - 10), 1).ToCharArray()[0] % 9; 
     int publicKeyStarts = bytesToSkip + encodedString.Substring((encodedString.Length - 2), 1).ToCharArray()[0] % 40; 
     string keyString = encodedString.Substring(publicKeyStarts, 176); 
     string modulusString = keyString.Substring(0, 172); 
     string exponentString = keyString.Substring(172); 
     RSAParameters publicKey = new RSAParameters(); 
     publicKey.Modulus = new byte[128]; 
     Array.Copy(System.Convert.FromBase64String(modulusString), 1, publicKey.Modulus, 0, 128); 
     publicKey.Exponent = System.Convert.FromBase64String(exponentString); 
     return publicKey; 
    } 

    protected byte[] GetSignature(string encodedString) 
    { 
     int bytesToSkip = encodedString.Substring((encodedString.Length - 10), 1).ToCharArray()[0] % 9; 
     int publicKeyStarts = bytesToSkip + encodedString.Substring((encodedString.Length - 2), 1).ToCharArray()[0] % 40; 
     String digSig = encodedString.Substring(0, publicKeyStarts - bytesToSkip) + encodedString.Substring(publicKeyStarts + 176); 
     return System.Convert.FromBase64String(digSig); 
    } 

を取得するために使用しました私はモジュラスおよび指数の長さ

+0

公開鍵を生成するためのRSA公開鍵

コードから弾性係数と指数の大きさや長さを取得することが判明あなたは何を試してみましたか?結果は正しいのですか?どのようなコード行が問題であるようですか?既存のコードがどのように、なぜその理由を理解していますか? (それは動作するのですか?)これは本当の例ですか、それとも宿題ですか? – PhillipH

答えて

関連する問題