Java Python DES加密

Java Python DES加密,java,python,django,encryption,Java,Python,Django,Encryption,我有一个项目,我们的供应商有自己的DES加密逻辑,但我使用django作为我的后端。我可以使用子流程运行java,但实际上我正计划将java代码转换为python 这是我的密码: import java.io.*; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import jav

我有一个项目,我们的供应商有自己的DES加密逻辑,但我使用django作为我的后端。我可以使用子流程运行java,但实际上我正计划将java代码转换为python

这是我的密码:

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运行它,例如:

java PHPDESEncrypt "3r108w5A" "cagent=sample/\\\\/loginname=sample/\\\\/password=password/\\\\/method=ca/\\\\/actype=0/\\\\/cur=USD"
结果应该是:

lt5tEqnzRCx67vJ8j3Ap5zIVZYkT01Ho+irM1NPdReJqwyrP9vlypDXvExx9sCOEJPcPCET0aPpKFkW1punRxP/uD8IFM1j4umwLuJpxPQTOdwJsbuuRmhmkFml6l3OV

我已经用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))

我已经用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))

将pyDes与python3一起使用,以下是演示代码:

def des_ecb_encode(source, key):
    des_obj = des(key, ECB, IV=None, pad=None, padmode=PAD_PKCS5)
    des_result = des_obj.encrypt(source)
    return base64.encodestring(des_result)


if __name__ == '__main__':

    src = b'cagent=81288128/\\\\/method=tc'
    key = b'12341234'
    encrypted = des_ecb_encode(src, key)
    print('encrypted: ', encrypted)
它会打印出来

encrypted:  b'IGcOAYEQN88F1NFLtBOK23PMeg42F7r8jchYOmglMAs=\n'

将pyDes与python3一起使用,以下是演示代码:

def des_ecb_encode(source, key):
    des_obj = des(key, ECB, IV=None, pad=None, padmode=PAD_PKCS5)
    des_result = des_obj.encrypt(source)
    return base64.encodestring(des_result)


if __name__ == '__main__':

    src = b'cagent=81288128/\\\\/method=tc'
    key = b'12341234'
    encrypted = des_ecb_encode(src, key)
    print('encrypted: ', encrypted)
它会打印出来

encrypted:  b'IGcOAYEQN88F1NFLtBOK23PMeg42F7r8jchYOmglMAs=\n'

您是否要求使用一种工具,将一种语言的代码转换为另一种语言?或者这里的人是否会将其重新写入Python?我想这就是你要问的,但我真的不确定。请尝试pydes模块,我认为它可以正常工作you@idjaw,或two@AfsalSalim,我认为仅仅pydes是不够的,在我的情况下,你是在要求一个工具,它可以将一种语言的代码转换成另一种语言吗?或者这里的人是否会将其重新写入Python?我想这就是你要问的,但我真的不确定。请尝试pydes模块,我认为它可以正常工作you@idjaw,或two@AfsalSalim,我认为就我而言,光靠皮德斯是不够的