java - Python DES 加密

标签 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 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

最佳答案

将 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'

关于java - Python DES 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40646297/

相关文章:

java - 没有Ajax想要打两个Url

python - 从 Python 插入 MySQL 数据库的问题

python - 将所有默认值移至一个 python 文件中

java - 在 Java 8 中一行访问 List<List<Person>> 中的 Person 对象的每个名称

Java JNA 无法在 Kernel32 中找到命名管道函数

java - 在 JavaScript 中使用 context-param 的最佳方式是什么

python - Tensorflow 中何时需要 watch() 函数来启用梯度跟踪?

python - Django 模型 : Common Ancestor Inheritance & Migration

javascript - Django 模板标签的未终止字符串文字错误

python - 在 Django 中,如何在保存之前向 request.POST 数据添加新值?