2009-05-19 23 views
0

pgpの暗号化と復号化のために、公開鍵と秘密鍵を文字列形式で渡す必要があります。私はこのようなキーを生成しましたが、それらを使用することはできません。だから誰も私から、これから文字列形式の公開鍵と秘密鍵を取得する方法を教えてもらえますか?また、rsakeygeneratorは秘密鍵のパスフレーズを与えていません。だから私は秘密鍵のパスフレーズを取得するのですか?秘密鍵と公開鍵を渡す問題?

private void button2_Click(object sender, EventArgs e) 
{ 
    // keyPair = createASymRandomCipher(); 
    //CipherPublicKey publicKey = getCipherPublicKey(keyPair); 
    AsymmetricCipherKeyPair keyPair = createASymRandomCipher(); 
    Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters pubkey = (Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters)keyPair.Public; 
    Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters privkey = (Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters)keyPair.Private; 
    CipherPublicKey pbkey = getCipherPublicKey(pubkey); 
    CipherPrivateKey prvkey = getCipherPrivateKey(privkey); 

} 

private static AsymmetricCipherKeyPair createASymRandomCipher() 
{ 
    RsaKeyPairGenerator r = new RsaKeyPairGenerator(); 
    r.Init(new KeyGenerationParameters(new SecureRandom(), 
      1024)); 
    AsymmetricCipherKeyPair keys = r.GenerateKeyPair(); 
    return keys; 
} 

[Serializable] 
private struct CipherPrivateKey 
{ 
    public byte[] modulus; 
    public byte[] publicExponent; 
    public byte[] privateExponent; 
    public byte[] p; 
    public byte[] q; 
    public byte[] dP; 
    public byte[] dQ; 
    public byte[] qInv; 
} 

[Serializable] 
private struct CipherPublicKey 
{ 
    public bool isPrivate; 
    public byte[] modulus; 
    public byte[] exponent; 
} 

private static CipherPublicKey getCipherPublicKey(Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters cPublic) 
{ 
    CipherPublicKey cpub = new CipherPublicKey(); cpub.modulus = cPublic.Modulus.ToByteArray(); 
    cpub.exponent = cPublic.Exponent.ToByteArray(); 
    return cpub; 
} 

private static CipherPrivateKey getCipherPrivateKey(Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters cPrivate) 
{ 
    CipherPrivateKey cpri = new CipherPrivateKey(); 
    cpri.dP = cPrivate.DP.ToByteArray(); 
    cpri.dQ = cPrivate.DQ.ToByteArray(); 
    cpri.modulus = cPrivate.Modulus.ToByteArray(); 
    cpri.p = cPrivate.P.ToByteArray(); 
    cpri.privateExponent = cPrivate.Exponent.ToByteArray(); 
    cpri.publicExponent = cPrivate.PublicExponent.ToByteArray(); 
    cpri.q = cPrivate.Q.ToByteArray(); 
    cpri.qInv = cPrivate.QInv.ToByteArray(); 
    return cpri; 
} 

答えて

0

パスフレーズを入力する必要があります。 の全体のポイントがのパスフレーズである場合、秘密鍵がなくてもそれを解読できず、ユーザーだけが秘密鍵を供給できるということです。

(私ははBouncyCastleのAPIに精通されていない、あなたのコードの残りの部分を見ていない。私もバイト配列のたくさんの可変構造体の知恵に疑問を行う...)

0

答えあなたの変換の質問への変換は、Base64Stringsに変換することです

16進数で入力しやすいように(ユーザーが簡単に入力できるように)、System.Runtime.Remoting.Metadata.W3cXsd2001名前空間を使用して/ HEX担当者からここにはexample in C#があります。

私はあなたのプロセスにセキュリティ上の欠陥があるかもしれないとも言いますが、私はそれに対処する資格があるとは確信していません。 (ジョンの記事を参照)

関連する問題