zoukankan      html  css  js  c++  java
  • AES 加解密 Java实现

    package com.smt.cipher.symmetry;
    
    import java.nio.charset.Charset;
    import java.security.SecureRandom;
    import java.util.Base64;
    
    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    
    /**
     * DES  工具
     * @author ZHANGYUKUN
     *
     */
    public class AESUtil {
    	public static final String  ENCODING = Charset.defaultCharset().name();
    	
    	
    	/**
    	 * 加密
    	 * @param data 原文
    	 * @param cipherStr 秘钥字符字符串(8的倍数)
    	 * @return
    	 */
    	public static String encrypt( String content , String secretkeyStr ) {
    		String rt = null;
    		try {
    			byte[] data = getDESCipher(secretkeyStr, Cipher.ENCRYPT_MODE ).doFinal(  content.getBytes(ENCODING) );
    			rt  = new String(Base64.getEncoder().encode(data), ENCODING);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return rt;
    	}
    	
    	/**
    	 * 解密
    	 * @param data 解密
    	 * @param cipherStr 秘钥字符串(8的倍数)
    	 * @return
    	 */
    	public static String descrypt(String data , String secretkeyStr) {
    		String rt = null;
    		try {
    			byte[] cipher = getDESCipher(secretkeyStr, Cipher.DECRYPT_MODE ).doFinal( Base64.getDecoder().decode( data.getBytes() ) );
    			rt = new String( cipher,ENCODING );
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return rt;
    	}
    	
    	
    	/**
    	 * 得到密码
    	 * @param secretkeyStr
    	 * @param mode
    	 * @return
    	 */
    	public static Cipher getDESCipher( String secretkeyStr,int mode ) {
    		int remainder = secretkeyStr.length()%8;
    		if( remainder != 0 ) {
    			throw new RuntimeException("秘钥字符串必须是8的倍数");
    		}
    		
    		try {
    			KeyGenerator keygen =KeyGenerator.getInstance("AES");
    			keygen.init(128, new SecureRandom(secretkeyStr.getBytes(ENCODING)));
    			SecretKey secretKey=keygen.generateKey();
    			
    			Cipher  cipher = Cipher.getInstance("AES");
    			cipher.init( mode ,  secretKey );
    			return cipher;
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    	
    
    }
    

      

    测试一下:

    package com.smt.cipher;
    
    import java.security.NoSuchAlgorithmException;
    
    import com.smt.cipher.symmetry.AESUtil;
    
    public class Main {
    
    	public static void main(String[] args) throws NoSuchAlgorithmException {
    		System.out.println(  AESUtil.encrypt("测试文件AES", "abcdabcd") );
    		System.out.println(  AESUtil.descrypt( AESUtil.encrypt("测试文件AES", "abcdabcd") , "abcdabcd") );
    	}
    
    }
    

      

    输出:

    代码git 下载地址:https://github.com/hualiuwuxin/tools.git

    能耍的时候就一定要耍,不能耍的时候一定要学。
  • 相关阅读:
    CF432D Prefixes and Suffixes
    CF126B Password
    如何实现输入历史记录功能
    python工作中总结
    今 天看到我十年前的一篇技术文章,想到不知不觉学编程十多年了,,
    现在互联网好多bug 想到都烦
    【图论】割点
    【DP】【P1941】【NOIP2014D1T3】飞扬的小鸟
    【线段树】【P3740】 [HAOI2014]贴海报
    【单调队列】【P1714】 切蛋糕
  • 原文地址:https://www.cnblogs.com/cxygg/p/9273770.html
Copyright © 2011-2022 走看看