import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.security.Key;
import java.util.Base64;
public class DESUtil2 {
private final static String IV_PARAMETER = "1Q2W3E4R";
private static final String ALGORITHM = "DES";
private static final String CIPHER_ALGORITHM = "DES/CBC/PKCS5Padding";
private static final String CHARSET = "utf-8";
private static Key generateKey(String password) throws Exception {
DESKeySpec dks = new DESKeySpec(password.getBytes(CHARSET));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
return keyFactory.generateSecret(dks);
}
public static String encrypt(String password, String data) {
if (password== null || password.length() < 8) {
throw new RuntimeException("加密失败,key不能小于8位",new Exception());
}
if (data == null){
return null;
}
try {
Key secretKey = generateKey(password);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
byte[] bytes = cipher.doFinal(data.getBytes(CHARSET));
return new String(Base64.getEncoder().encode(bytes));
} catch (Exception e) {
System.out.println(e.toString());
return data;
}
}
public static String decrypt(String password, String data) {
if (password== null || password.length() < 8) {
throw new RuntimeException("解密失败,key不能小于8位",new Exception());
}
if (data == null){
return null;
}
try {
Key secretKey = generateKey(password);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
return new String(cipher.doFinal(Base64.getDecoder().decode(data.getBytes(CHARSET))), CHARSET);
} catch (Exception e) {
System.out.println(e.toString());
return data;
}
}
public static void main(String[] args) {
System.out.println(encrypt("PASSWORD","http://www.baidu.com"));
}
}
var key = "PASSWORD";
var iv = "1Q2W3E4R";
function desDecrypt(str, key, iv) {
var result_value;
try {
var keyHex_decrypt = CryptoJS.enc.Utf8.parse(key);
var iv = CryptoJS.enc.Utf8.parse(iv);
var decrypted = CryptoJS.DES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse(str)
}, keyHex_decrypt, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
result_value = decrypted.toString(CryptoJS.enc.Utf8);
*
} catch (err) {
console.log('des 解密 ------------------------- ');
console.log(err);
console.log("解密前数据:" + str);
}
return result_value;
}
function desEncrypt(str, key, iv) {
try {
var keyHex = CryptoJS.enc.Utf8.parse(key);
var iv = CryptoJS.enc.Utf8.parse(iv);
var encrypt = CryptoJS.DES.encrypt(str, keyHex, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypt.toString();
} catch (err) {
console.log('des 加密 ------------------------- ');
console.log(err);
console.log("解密前数据:" + str);
}
};