2016-07-29 35 views
1

私はOpensslに "Hola mundo"を含むファイルを以下のコマンドで暗号化しました。次に、私はC#を使用してこのファイルを復号化します。OpenSSLのトリプルDES暗号化とC#を使った復号

enc -des-ede -nosalt -in ArchivoNormal.txt -pass file:MiCertificado.cer -out ArchivoEncryptadoTDEOpenSSL.txt 

1)

private void DecryptFile(string source, string destination, byte[] bkey) 
{ 
    TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider(); 

    TDES.Mode = CipherMode.ECB; 
    TDES.Padding = PaddingMode.PKCS7; 
    TDES.KeySize = 192; 
    TDES.BlockSize = 64; 
    TDES.Key = bkey; 

    FileStream fsread = new FileStream(source, FileMode.Open, FileAccess.Read);   
    ICryptoTransform desdecrypt = TDES.CreateDecryptor(); 
    CryptoStream cryptostreamDecr = new CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read); 

    StreamWriter fsDecrypted = new StreamWriter(destination); 
    fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd()); 
    fsDecrypted.Flush(); 
    fsDecrypted.Close(); 
} 

それはエラー「Datos Incorrectosを返し、暗号化ファイルを復号化するためにMiCertificado.cer

private byte[] GenerateKey() 
{ 
    X509Certificate2 cer = new X509Certificate2(); 
    cer.Import("D:\\MiCertificado.cer"); 

    TripleDESCryptoServiceProvider desCrypto = (TripleDESCryptoServiceProvider)TripleDESCryptoServiceProvider.Create(); 

    byte[] results = cer.GetPublicKey(); 

    MD5 md5 = MD5.Create(); 
    int preKeyLength = results.Length; 
    byte[] prekey = null; 
    prekey = new byte[preKeyLength]; 
    Buffer.BlockCopy(results, 0, prekey, 0, results.Length); 
    byte[] key = md5.ComputeHash(prekey); 

    md5.Clear(); 
    md5 = null; 

    return key; 
} 

2)から公開鍵を取得するためには、 "

enter image description here

+1

3DESを使用せず、AESを使用します。これは高度な暗号化規格であり、使用するのが難しくなく、より安全です。 – zaph

+0

それは本当ですが、今回は3DESを使用しなければなりませんが、私はそれを変更できません。 – EduardoUstarez

+1

はい、セキュリティは第二の関心事です。 – zaph

答えて

1

OpenSSLはあなたの例では証明書として証明書を使用していませんが、単にファイルの内容をパスワードとして使用しています。次に、EVP_BytesToKeyを使用してそのパスワードを3DES操作の適切なキー/ IVに変換します。指定しなかったのでMD5をダイジェストとして使用します。

ファイルをDERからPEMエンコーディングに変更するバイトとして読み込んだだけなので、余分な空白を含むPEMエンコーディングでは暗号化された出力が変更されます。

ここで証明書の公開鍵を使用して何かをする予定がある場合は、opensslコマンドが正しくありません。

+0

@ Bartonのコメントで拡張する* "ここで証明書の公開鍵を使って何かをしようとするならば、あなたのopensslコマンドは正しくありません" *、あなたはPFXとPKCS12を調べるべきです。 – jww

関連する問題