zoukankan      html  css  js  c++  java
  • DES加密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.DESUtil;
    
    public class Main2 {
    
    	public static void main(String[] args) throws NoSuchAlgorithmException {
    		System.out.println(   DESUtil.encrypt("测试文本DES", "abcdabcd" ) );
    		System.out.println(   DESUtil.descrypt( DESUtil.encrypt("测试文本DES", "abcdabcd" ) , "abcdabcd"));
    	}
    
    }
    

      

    输出结果:

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

    能耍的时候就一定要耍,不能耍的时候一定要学。
  • 相关阅读:
    必须了解的经典排序算法整理
    浅谈Code Review
    NOIP2018提高组省一冲奖班模测训练(六)
    NOIP2018提高组省一冲奖班模测训练(五)
    NOIP2018提高组金牌训练营——动态规划专题
    poj 3074
    搜索中的剪枝
    bitset骚操作
    NOIP 2017 宝藏
    prim求最小生成树
  • 原文地址:https://www.cnblogs.com/cxygg/p/9273588.html
Copyright © 2011-2022 走看看