您的位置 首页 java

java的加密解密工具类

一、 DES

  • DES综合运用了置换、代替、代数等多种密码技术。它设计精巧、实现容易、使用方便,堪称是适应计算机环境的近代 分组密码 的一个典范。DES的设计充分体现了 Shannon 所阐述的设计密码的思想,标志着密码的设计与分析达到了新的水平。
  •   DES是一种分组密码。明文、密文和密钥的分组长度都是64位。
  •   DES是面向 二进制 密码算法 。因而能够加解密任何形式的计算机数据。
  •   DES是对合运算,因而加密和解密共用同一算法,从而使工程实现的工作量减半。
  •   DES的密码结构属于 Feistel 结构。

注意:网上可能部分文章中存在DES的加密只适用在windows 测试环境

当迁移到生产环境中,执行会发生异常的情况

 import  java .security.Key;
import java.security. Secure Random;
import java.util.Base64;
import  javax .crypto.Cipher;
import javax.crypto.KeyGenerator;
/**
* 加解密工具类
*/public class DesUtil {
  
    public  static  Key setKey(String strKey) {
        Key key = null;
        try {
            KeyGenerator generator = KeyGenerator. getInstance ("DES");
            //----------此处代码可以解决windowns与生产环境 linux 的异常情况
            SecureRandom secureRandom=SecureRandom.getInstance("SHA1PRNG");
            secureRandom.setSeed(strKey.get byte s());
           //------------
            generator.init(secureRandom); // 根据参数生成key
            key = generator.generateKey();
        } catch ( Exception  e) {
            e.printStackTrace();
        }
        return key;
    }

    /**
     * @param source 编码内容
     * @param key 密钥
     * @param charSet 编码格式
     * @return
     */    public static String encrypt(String source, String key, String charSet) {
         String  encrypt = null;
        try {
            byte[] ret = encrypt(source.getBytes(charSet), key);
            encrypt = new String(Base64.getEncoder().encode(ret));
        } catch (Exception e) {
            e.printStackTrace();
            encrypt = null;
        }
        return encrypt;
    }

    /**
     * @param encryptedData 解码内容
     * @param key 密钥
     * @param charSet 编码格式
     * @return
     */    public static String decrypt(String encryptedData, String key, String charSet) {
        String descryptedData = null;
        try {
            byte[] ret = descrypt(Base64.get decode r().decode(encryptedData.getBytes()), key);
            descryptedData = new String(ret,  charSet );
        } catch (Exception e) {
            e.printStackTrace();
            descryptedData = null;
        }
        return descryptedData;
    }

    public static byte[] encrypt(byte[] primaryData, String key) {
        Key desKey = setKey(key);
        try {
             Cipher  cipher = Cipher.getInstance("DES"); // Cipher对象实际完成加密操作
            cipher.init(Cipher.ENCRYPT_MODE, desKey); // 用密钥初始化Cipher对象(加密)
            return cipher.doFinal(primaryData);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static byte[] descrypt(byte[] encryptedData, String key) {
        Key desKey = setKey(key);
        try {
            Cipher cipher = Cipher.getInstance("DES"); // Cipher对象实际完成解密操作
            cipher.init(Cipher.DECRYPT_MODE, desKey); // 用密钥初始化Cipher对象(解密)
            return cipher.doFinal(encryptedData);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static  void  main(String[] args) {
        String code = "hello world";
        String key = "thisisakey";
        String unicode = "utf-8";
        String encrypt = encrypt(code, key, unicode);
        String decrypt = decrypt(encrypt, key, unicode);
        System.out.println("原内容:" + code);
        System.out.println("加密:" + encrypt);
        System.out.println("解密:" + decrypt);
    }
}
  

生成key

二、输出结果

原内容: hello world

加密:2bUjtqfPz5MSxVevldo2Ig==

解密:hello world

Process finished with exit code 0

文章来源:智云一二三科技

文章标题:java的加密解密工具类

文章地址:https://www.zhihuclub.com/172056.shtml

关于作者: 智云科技

热门文章

网站地图