博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中AES加密解密以及签名校验
阅读量:6293 次
发布时间:2019-06-22

本文共 4099 字,大约阅读时间需要 13 分钟。

hot3.png

import java.security.InvalidKeyException;import java.security.Key;import java.security.NoSuchAlgorithmException;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.KeyGenerator;import javax.crypto.NoSuchPaddingException;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64;import org.apache.commons.codec.digest.DigestUtils;/** * Created by Lb on 2017/9/10. */public class AESCoder {  //密钥算法  public static final String KEY_ALGORITHM = "AES";  //工作模式,填充模式  public static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";  /**   * 转换密钥   *   * @param key 二进制密钥   * @return Key密钥   */  private static Key toKey(byte[] key) {    SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM);    return secretKey;  }  /**   * 解密   */  public static byte[] decrpyt(byte[] data, byte[] key)      throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {    //还原密钥    Key k = toKey(key);    //实例化    Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);    //初始化    cipher.init(Cipher.DECRYPT_MODE, k);    //执行操作    return cipher.doFinal(data);  }  /**   * 加密   */  public static byte[] encrypt(byte[] data, byte[] key)      throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {    //还原密钥    Key k = toKey(key);    //实例化    Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);    //初始化    cipher.init(Cipher.ENCRYPT_MODE, k);    //执行操作    return cipher.doFinal(data);  }  /**   * 生成密钥   */  public static byte[] initKey() throws NoSuchAlgorithmException {    //实例化    KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_ALGORITHM);    //AES 要求密钥长度为128位、192位或256位    keyGenerator.init(128);    //生成秘密密钥    SecretKey secretKey = keyGenerator.generateKey();    //获取密钥的二进制编码形式    return secretKey.getEncoded();  }  /**   * 初始化密钥   *   * @return Base64编码密钥   */  public static String initKeyString() throws NoSuchAlgorithmException {    return Base64.encodeBase64String(initKey());  }  /**   * 获取密钥   */  public static byte[] getKey(String key) {    return Base64.decodeBase64(key);  }  /**   * 解密   *   * @param data 待解密数据   * @param key 密钥   * @return byte[] 解密数据   */  public static byte[] decrypt(byte[] data, String key)      throws IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException {    return decrpyt(data, getKey(key));  }  /**   * 加密   *   * @param data 待加密数据   * @param key 密钥   * @return byte[]加密数据   */  public static byte[] encrypt(byte[] data, String key)      throws IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException {    return encrypt(data, getKey(key));  }  /**   * 摘要处理   *   * @param data 待摘要数据   * @return 摘要字符串   */  public static String shaHex(byte[] data) {    return DigestUtils.md5Hex(data);  }  /**   * 验证   *   * @param data 待摘要数据   * @param messageDigest 摘要字符串   * @return 验证结果   */  public static boolean vailidate(byte[] data, String messageDigest) {    return messageDigest.equals(shaHex(data));  }  public static void main(String[] args)      throws NoSuchAlgorithmException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchPaddingException {    String inputStr = "AES18803696960http://www.baidu;com";    byte[] inputData = inputStr.getBytes();    System.out.println("原文:" + inputStr);    //初始化密钥    byte[] key = AESCoder.initKey();    System.out.println("密钥:" + Base64.encodeBase64String(key));    //加密    inputData = AESCoder.encrypt(inputData, key);    System.out.println("加密后:" + Base64.encodeBase64String(inputData));    //解密    byte[] outputData = AESCoder.decrpyt(inputData, key);    String outputStr = new String(outputData);    System.out.println("解密后:" + outputStr);    System.out.println("校验签名:" + AESCoder.vailidate(inputData, AESCoder.shaHex(inputData)));  }}

转载于:https://my.oschina.net/kkrgwbj/blog/1533816

你可能感兴趣的文章
模块化你的JS代码
查看>>
掌握shell应用,Linux任你行走
查看>>
【开篇】自我介绍和博客未来规划
查看>>
浪潮英特尔在德国发布KEEP升级计划 用户可提前体验英特尔KNM
查看>>
在SDN走向商用部署的路上,锐捷网络一直在不断实践
查看>>
微信做入口,微软却想做入口的入口
查看>>
你知道数据中心宕机的真正成本吗?
查看>>
「雷锋前线」那昕出任CEO,“什么值得买”会变吗
查看>>
如何构建高可用ZooKeeper集群
查看>>
NodeJS和C++之间的类型转换
查看>>
你的代码糟粕比精华要多得多
查看>>
混合云是企业IT的未来吗?
查看>>
Salesforce针对移动工作人员推全新人工智能支持工具
查看>>
《深入理解Nginx:模块开发与架构解析》一1.2 为什么选择Nginx
查看>>
IDC:企业向云转变推动了SD-WAN市场增长
查看>>
《深入理解C++11:C++ 11新特性解析与应用》——2.4 宏__cplusplus
查看>>
苹果发行10亿美元绿色债券 继续支持巴黎协定
查看>>
杨彪 | 一次线上游戏卡死的解决历程(文末赠书福利)
查看>>
最新蓝牙版本助力实现“无连接式” 物联网
查看>>
企业该如何选择WMS系统?
查看>>