All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hecloud.runtime.common.encryptor.DESEncrptor Maven / Gradle / Ivy

package com.hecloud.runtime.common.encryptor;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.Key;
import java.security.SecureRandom;
import java.util.Optional;

/**
 * 加密器接口实现
 *
 * @author LoveinBJ
 * @version 1.0
 * @since 2016.08.05
 */
public class DESEncrptor implements Encryptor {
    /**
     * DES 算法 
* 可替换为以下任意一种算法,同时key值的size相应改变。 * *
     * DES                  key size must be equal to 56
     * DESede(TripleDES)    key size must be equal to 112 or 168
     * AES                  key size must be equal to 128, 192 or 256,but 192 and 256 bits may not be available
     * Blowfish             key size must be multiple of 8, and can only range from 32 to 448 (inclusive)
     * RC2                  key size must be between 40 and 1024 bits
     * RC4(ARCFOUR)         key size must be between 40 and 1024 bits
     * 
*/ private static final String ALGORITHM = "DES"; private static Logger logger = LoggerFactory.getLogger(DESEncrptor.class); @Override public String encrypt(String data, String key) throws Exception { byte[] mask = encrypt(data.getBytes(StandardCharsets.ISO_8859_1), key); mask = Optional.ofNullable(mask).orElseThrow(() -> new Exception("加密失败!")); return Base64Coder.encode(mask); } @Override public String decrypt(String cipherText, String key) throws Exception { byte[] buffer = decrypt(Base64Coder.decode(cipherText.toCharArray()), key); buffer = Optional.ofNullable(buffer).orElseThrow(() -> new Exception("解密异常!")); return new String(buffer, StandardCharsets.UTF_8); } @Override public byte[] encrypt(byte[] data, String key) { try { SecureRandom random = new SecureRandom(); DESKeySpec desKey = new DESKeySpec(key.getBytes()); // 创建一个密匙工厂,然后用它把DESKeySpec转换成 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); SecretKey secretKey = keyFactory.generateSecret(desKey); // Cipher对象实际完成加密操作 Cipher cipher = Cipher.getInstance(ALGORITHM); // 用密匙初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, secretKey, random); // 正式执行加密操作 return cipher.doFinal(data); } catch (Throwable e) { logger.error("加密失败!", e); return null; } } @Override public byte[] decrypt(byte[] cipherText, String key) { try { Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, generateKey(key.getBytes())); return cipher.doFinal(cipherText); } catch (Exception e) { logger.error("Decrypt ERROR:", e); return null; } } /** * DES 算法转换密钥
* * @param key 密钥数据 * @return key Key对象 * @throws Exception 运行异常 */ private Key generateKey(byte[] key) throws Exception { SecretKey secretKey; if (ALGORITHM.equals(DEFAULT.DES.name()) || ALGORITHM.equals(DEFAULT.DESede.name())) { DESKeySpec dkSpec = new DESKeySpec(key); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM); secretKey = keyFactory.generateSecret(dkSpec); } else { // 当使用其他对称加密算法时,如AES、Blowfish等算法时,用下述代码替换上述三行代码 secretKey = new SecretKeySpec(key, ALGORITHM); } return secretKey; } /** * 默认算法 * * @author LoveinBJ */ public enum DEFAULT { /** * */ DES, /** * */ DESede } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy