1

前段时间我用java做了一个密码生成程序。它根据输入字符串和密码生成密码。它使用:pbewithMD5andDES

现在我正在用 javascript 为移动设备制作一个新版本。我发现库 crypto-js 女巫允许我生成 MD5 哈希并使用 DES 加密

但我似乎无法生成相同的密码

我究竟做错了什么?

爪哇版:

 public static String generate(String password, String passphase) throws Exception {
    try {
        PBEKeySpec pbeKeySpec = new PBEKeySpec(passphase.toCharArray());
        PBEParameterSpec pbeParamSpec;
        SecretKeyFactory keyFac;
        // Salt
        byte[] salt = {(byte) 0xc8, (byte) 0x73, (byte) 0x61, (byte) 0x1d, (byte) 0x1a, (byte) 0xf2, (byte) 0xa8, (byte) 0x99};
        // Iteration count
        int count = 20;
        // Create PBE parameter set
        pbeParamSpec = new PBEParameterSpec(salt, count);
        keyFac = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
        SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec);
        // Create PBE Cipher
        Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
        // Initialize PBE Cipher with key and parameters
        pbeCipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec);
        // Our cleartext
        byte[] cleartext = password.getBytes();
        // Encrypt the cleartext
        byte[] ciphertext = pbeCipher.doFinal(cleartext);
        return byteArrayToHexString(ciphertext).substring(0, 12);
    } catch (Exception ex) {
        throw new Exception(ex.getMessage());
    }
}

public static String byteArrayToHexString(byte[] b){
    StringBuilder sb = new StringBuilder(b.length * 2);
    for (int i = 0; i < b.length; i++){
        int v = b[i] & 0xff;
        if (v < 16) {
            sb.append('0');
        }
        sb.append(Integer.toHexString(v));
    }
    return sb.toString().toUpperCase();
}

新的javascript版本(不竞争):(我尝试了两个命令:首先散列然后DES,以及其他方式)

var hashedPassword = CryptoJS.MD5(password);
var encryptedPassword = CryptoJS.DES.encrypt(hashedPassword, passphrase).toString();
var result = encryptedPassword.toString().substring(0, 12).toUpperCase();

我走对了吗?

4

0 回答 0