2016-11-17 14 views
0

私は自分のバックエンドとしてdjangoを使用していますが、私たちのプロバイダが独自のDES暗号化ロジックを持っているプロジェクトを持っています。これを変換する方法についてPython DES暗号化

import java.io.*; 
import java.security.SecureRandom; 
import javax.crypto.Cipher; 
import javax.crypto.SecretKey; 
import javax.crypto.SecretKeyFactory; 
import javax.crypto.spec.DESKeySpec; 
import sun.misc.BASE64Encoder; 
import sun.misc.BASE64Decoder; 

public class PHPDESEncrypt { 
    String key; 
    public PHPDESEncrypt() { 

    } 
    public PHPDESEncrypt(String key) { 
     this.key = key; 
    } 

    public byte[] desEncrypt(byte[] plainText) throws Exception { 
     SecureRandom sr = new SecureRandom(); 
     DESKeySpec dks = new DESKeySpec(key.getBytes()); 
     SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); 
     SecretKey key = keyFactory.generateSecret(dks); 
     Cipher cipher = Cipher.getInstance("DES"); 
     cipher.init(Cipher.ENCRYPT_MODE, key, sr); 
     byte data[] = plainText; 
     byte encryptedData[] = cipher.doFinal(data); 
     return encryptedData; 
    } 

    public String encrypt(String input) throws Exception { 
     return base64Encode(desEncrypt(input.getBytes())).replaceAll("\\s*", ""); 
    } 

    public String base64Encode(byte[] s) { 
     if (s == null) return null; 
     BASE64Encoder b = new BASE64Encoder(); 
     return b.encode(s); 
    } 

    public static void main(String args[]) { 
     try { 
      PHPDESEncrypt d = new PHPDESEncrypt(args[0]); 
      String p=d.encrypt(args[1]); 
      System.out.println(p); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public String getKey() { 
     return key; 
    } 

    public void setKey(String key) { 
     this.key = key; 
    } 
} 

任意の提案:ここ

が私のコードです..私は、サブプロセスを使用してJavaを実行することができますが、私は実際のpythonへのJavaコードを変換することを計画していますか?図書館やオンラインツールのように?

java PHPDESEncrypt "3r108w5A" "cagent=sample/\\\\/loginname=sample/\\\\/password=password/\\\\/method=ca/\\\\/actype=0/\\\\/cur=USD" 

結果は次のようになります:

lt5tEqnzRCx67vJ8j3Ap5zIVZYkT01Ho+irM1NPdReJqwyrP9vlypDXvExx9sCOEJPcPCET0aPpKFkW1punRxP/uD8IFM1j4umwLuJpxPQTOdwJsbuuRmhmkFml6l3OV 
+0

あなたは、ある言語でコードを受け取り、それをanotheに変換するツールを求めていますか? r言語?あるいは、ここの誰かがこれをPythonに書き直すのであれば?私はそれがあなたが求めていると思いますが、私は本当に分かりません。 – idjaw

+0

私はそれがあなたのためにうまくいくと思うpydesモジュールを試してください –

+0

@ idjaw、どちらか2つの –

答えて

0

は、私はすでにそれに答え簡単に私は次のようにJavaでそれを実行し、この

を変換することができます十分に誰かがあるかどうか、それが良いだろうpycryptoを使ってコードを作成する

from Crypto.Cipher import DES 
from base64 import b64encode 

def pad(s): 
    return s + (DES.block_size - len(s) % DES.block_size) * \ 
     chr(DES.block_size - len(s) % DES.block_size) 


def get_params(data): 
    params = '' 
    if not data: 
     return params 
    for key, value in data.iteritems(): 
     if key and value: 
      params += '{0}={1}/\\\/'.format(key, value) 
    return params[:-4] 


def des_encrypt(plain_text): 
     key = '3r108w5A' 
     des = DES.new(key) 
     return b64encode(des.encrypt(pad(plain_text))) 


create_params = {'cagent': 'sample', 
       'loginname': 'sample', 
       'password': 'password', 
       'method': 'ca', 
       'actype': '0', 
       'cur': 'USD'} 

params = des_encrypt(get_params(create_params)) 
関連する問題