zoukankan      html  css  js  c++  java
  • AES 对称加密

      1 package com.skynet.rimp.common.utils.string;
      2 
      3 import java.io.UnsupportedEncodingException;
      4 import java.security.InvalidKeyException;
      5 import java.security.NoSuchAlgorithmException;
      6 import java.security.SecureRandom;
      7 
      8 import javax.crypto.BadPaddingException;
      9 import javax.crypto.Cipher;
     10 import javax.crypto.IllegalBlockSizeException;
     11 import javax.crypto.KeyGenerator;
     12 import javax.crypto.NoSuchPaddingException;
     13 import javax.crypto.SecretKey;
     14 import javax.crypto.spec.SecretKeySpec;
     15 
     16 public class AESUtil {
     17 
     18     private static final String key = "yunyou17lw";
     19 
     20     /**
     21      * 加密
     22      * @param content 需要加密的内容
     23      * @param password  加密密码
     24      * @return
     25      */
     26     private static byte[] encryptByte(String content, String password) {
     27         try {
     28             KeyGenerator kgen = KeyGenerator.getInstance("AES");
     29             kgen.init(128, new SecureRandom(password.getBytes()));
     30             SecretKey secretKey = kgen.generateKey();
     31             byte[] enCodeFormat = secretKey.getEncoded();
     32             SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
     33             Cipher cipher = Cipher.getInstance("AES");// 创建密码器
     34             byte[] byteContent = content.getBytes("utf-8");
     35             cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
     36             byte[] result = cipher.doFinal(byteContent);
     37             return result; // 加密
     38         } catch (NoSuchAlgorithmException e) {
     39             e.printStackTrace();
     40         } catch (NoSuchPaddingException e) {
     41             e.printStackTrace();
     42         } catch (InvalidKeyException e) {
     43             e.printStackTrace();
     44         } catch (UnsupportedEncodingException e) {
     45             e.printStackTrace();
     46         } catch (IllegalBlockSizeException e) {
     47             e.printStackTrace();
     48         } catch (BadPaddingException e) {
     49             e.printStackTrace();
     50         }
     51         return null;
     52     }
     53 
     54     /**
     55      * 解密
     56      * @param content  待解密内容
     57      * @param password 解密密钥
     58      * @return
     59      */
     60     private static byte[] decryptByte(byte[] content, String password) {
     61         try {
     62             KeyGenerator kgen = KeyGenerator.getInstance("AES");
     63             kgen.init(128, new SecureRandom(password.getBytes()));
     64             SecretKey secretKey = kgen.generateKey();
     65             byte[] enCodeFormat = secretKey.getEncoded();
     66             SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
     67             Cipher cipher = Cipher.getInstance("AES");// 创建密码器
     68             cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
     69             byte[] result = cipher.doFinal(content);
     70             return result; // 加密
     71         } catch (NoSuchAlgorithmException e) {
     72             e.printStackTrace();
     73         } catch (NoSuchPaddingException e) {
     74             e.printStackTrace();
     75         } catch (InvalidKeyException e) {
     76             e.printStackTrace();
     77         } catch (IllegalBlockSizeException e) {
     78             e.printStackTrace();
     79         } catch (BadPaddingException e) {
     80             e.printStackTrace();
     81         }
     82         return null;
     83     }
     84 
     85     /**
     86      * AES加密
     87      * @param str
     88      * @return
     89      */
     90     public static String encrypt(String str) {
     91         return BinaryHex.binary2Hex(encryptByte(str, key));
     92     }
     93 
     94     /**
     95      * AES解密
     96      * @param str
     97      * @return
     98      */
     99     public static String decrypt(String str) throws UnsupportedEncodingException {
    100         // 16进制转2进制
    101         byte[] decryptFrom = BinaryHex.hex2Byte(str);
    102         // 根据byte进行解码
    103         byte[] decryptResult = decryptByte(decryptFrom, key);
    104         return new String(decryptResult,"UTF-8");
    105     }
    106 
    107     public static void main(String[] args) throws UnsupportedEncodingException {
    108         String str = "发多少房间打扫看来减肥鲁大师 <br>///fdsfds房贷首付斯蒂芬是";
    109         // 加密
    110         System.out.println("加密前:" + str);
    111         String s = AESUtil.encrypt(str);
    112         System.out.println("加密后:" + s);
    113 
    114         System.out.println("解密后:" + AESUtil.decrypt(s));
    115     }
    116 }
     1 package com.skynet.rimp.common.utils.string;
     2 
     3 /**
     4  * 2进制/16进制互转
     5  *
     6  * @author Jieven
     7  * @date 2014-5-12
     8  */
     9 public class BinaryHex {
    10 
    11     /**
    12      * 2进制转16进制
    13      * @param bString 2进制字符串
    14      * @return
    15      */
    16     public static String binary2Hex(String bString) {
    17         if (bString == null || bString.equals("") || bString.length() % 8 != 0)
    18             return null;
    19         StringBuffer tmp = new StringBuffer();
    20         int iTmp = 0;
    21         for (int i = 0; i < bString.length(); i += 4) {
    22             iTmp = 0;
    23             for (int j = 0; j < 4; j++) {
    24                 iTmp += Integer.parseInt(bString.substring(i + j, i + j + 1)) << (4 - j - 1);
    25             }
    26             tmp.append(Integer.toHexString(iTmp));
    27         }
    28         return tmp.toString();
    29     }
    30 
    31     /**
    32      * 16进制转2进制
    33      * @param hexString
    34      * @return
    35      */
    36     public static String hex2Binary(String hexString) {
    37         if (hexString == null || hexString.length() % 2 != 0)
    38             return null;
    39         String bString = "", tmp;
    40         for (int i = 0; i < hexString.length(); i++) {
    41             tmp = "0000" + Integer.toBinaryString(Integer.parseInt(hexString.substring(i, i + 1), 16));
    42             bString += tmp.substring(tmp.length() - 4);
    43         }
    44         return bString;
    45     }
    46 
    47     /**
    48      * 将二进制转换成16进制
    49      * @param buf
    50      * @return
    51      */
    52     public static String binary2Hex(byte buf[]) {
    53         StringBuffer sb = new StringBuffer();
    54         for (int i = 0; i < buf.length; i++) {
    55             String hex = Integer.toHexString(buf[i] & 0xFF);
    56             if (hex.length() == 1) {
    57                 hex = '0' + hex;
    58             }
    59             sb.append(hex.toUpperCase());
    60         }
    61         return sb.toString();
    62     }
    63 
    64     /**
    65      * 将16进制转换为二进制
    66      * @param hexStr
    67      * @return
    68      */
    69     public static byte[] hex2Byte(String hexStr) {
    70         if (hexStr.length() < 1)
    71             return null;
    72         byte[] result = new byte[hexStr.length() / 2];
    73         for (int i = 0; i < hexStr.length() / 2; i++) {
    74             int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
    75             int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
    76             result[i] = (byte) (high * 16 + low);
    77         }
    78         return result;
    79     }
    80 
    81     public static void main(String[] args) {
    82         String bString = "1010101111001101";
    83         System.out.println(binary2Hex(bString));
    84 
    85         String hexString = "ABCD";
    86         System.out.println(hex2Binary(hexString));
    87     }
    88 }

    一共两个类,可制作成工具类

  • 相关阅读:
    区块链
    区块链
    区块链
    区块链
    区块链 – 介绍
    区块链 教程
    Matplotlib 直方图
    Matplotlib 饼图
    Matplotlib 柱状图
    Matplotlib 多个图形
  • 原文地址:https://www.cnblogs.com/yydxh/p/11958665.html
Copyright © 2011-2022 走看看