Выдается передача секретного ключа и открытого ключа? - PullRequest
0 голосов
/ 19 мая 2009

Мне нужно передать открытый ключ и закрытый ключ в строковом формате для шифрования и дешифрования в 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;
}

Ответы [ 2 ]

0 голосов
/ 20 мая 2009

Ответ на вопрос о преобразовании заключается в преобразовании их в Base64Strings

Если вы хотите, чтобы он был в шестнадцатеричном формате (чтобы пользователь мог ввести его проще), вы можете использовать пространство имен System.Runtime.Remoting.Metadata.W3cXsd2001, чтобы преобразовать в / из представителя HEX. Вот пример в C # .

Я также скажу, что в вашем процессе может быть недостаток безопасности, но я не уверен, что у меня есть на это право. (См. Пост Джона)

0 голосов
/ 19 мая 2009

Вы должны спросить пользователя о ключевой фразе. Смысл в наличии ключевой фразы состоит в том, что вы не сможете обработать закрытый ключ без него, и только пользователь может предоставить его.

(Я не смотрел на остальную часть вашего кода, не знаком с API BouncyCastle. Хотя я сомневаюсь в целесообразности изменяемой структуры с большим количеством байтовых массивов ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...