2017-05-31 8 views
-2

私はpython/djangoの新機能です。私はAES暗号化を使用したい。 検索後私はこのようなライブラリをいくつか見つけました:https://gist.github.com/jeetsukumaran/1291836 私はIVを持っているので使用できませんでしたが、IVコードはありません。 私はC#でサンプルコードを持っています。いずれか私はこのコードをPythonコードに変換するのに役立ちますか?ここでpython AES Encrypt

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Security.Cryptography; 
using System.IO; 
namespace AESUtility { 
public class AES { 
    string AES_Key = string.Empty; 
    string AES_IV = string.Empty; 
    public AES(string AES_Key, string AES_IV) { 
    this.AES_Key = AES_Key; 
    this.AES_IV = AES_IV; 
    } 
    public bool Encrypt(String Input, out string encryptedString) { 
    try { 
    var aes = new RijndaelManaged(); 
    aes.KeySize = 256; 
    aes.BlockSize = 256; 
    aes.Padding = PaddingMode.PKCS7; 
    aes.Key = Convert.FromBase64String(this.AES_Key); 
    aes.IV = Convert.FromBase64String(this.AES_IV); 
    var encrypt = aes.CreateEncryptor(aes.Key, aes.IV); 
    byte[] xBuff = null; 
    using(var ms = new MemoryStream()) { 
    using(var cs = new CryptoStream(ms, encrypt, CryptoStreamMode.Write)) { 
     byte[] xXml = Encoding.UTF8.GetBytes(Input); 
     cs.Write(xXml, 0, xXml.Length); 
    } 
    xBuff = ms.ToArray(); 
    } 
    encryptedString = Convert.ToBase64String(xBuff); 
    return true; 
    } catch (Exception ex) { 
    encryptedString = string.Empty; 
    return false; 
    } 
    } 
    public bool Decrypt(String Input, out string decodedString) { 
    try { 
    RijndaelManaged aes = new RijndaelManaged(); 
    aes.KeySize = 256; 
    aes.BlockSize = 256; 
    aes.Mode = CipherMode.CBC; 
    aes.Padding = PaddingMode.PKCS7; 
    aes.Key = Convert.FromBase64String(this.AES_Key); 
    aes.IV = Convert.FromBase64String(this.AES_IV); 
    var decrypt = aes.CreateDecryptor(); 
    byte[] xBuff = null; 
    using(var ms = new MemoryStream()) { 
    using(var cs = new CryptoStream(ms, decrypt, CryptoStreamMode.Write)) { 
     byte[] xXml = Convert.FromBase64String(Input); 
     cs.Write(xXml, 0, xXml.Length); 
    } 
    xBuff = ms.ToArray(); 
    } 
    decodedString = Encoding.UTF8.GetString(xBuff); 
    return true; 
    } catch (Exception ex) { 
    decodedString = string.Empty; 
    return false; 
    } 
    } 
} 
} 
+3

私は、スタックオーバーフローが、コードの書き込みサービスではないため、オフトピックとして、この質問を閉じるために投票しています。コードの変換に問題がある場合は、質問を更新してください。 – Alasdair

+0

このC#コードは、私が欲しいものの単なるサンプルです。私はPythonにそれを秘密にする必要はありません。 –

+0

あなたはhttp://pythonhosted.org/pycrypto/を使うことができます、それは自分自身のIVを設定するためのサポートを持っています。例:http://pythonhosted.org/pycrypto/Crypto.Cipher.AES-module.html – valentin

答えて

0

はよく知られているpycryptoライブラリを使用してAES暗号化の一例である:

>>> from Crypto.Cipher import AES 
>>> obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456') 
>>> message = "The answer is no" 
>>> ciphertext = obj.encrypt(message) 
>>> ciphertext 
'\xd6\x83\x8dd!VT\x92\xaa`A\x05\xe0\x9b\x8b\xf1' 
>>> obj2 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456') 
>>> obj2.decrypt(ciphertext) 
'The answer is no'