12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package com.ym.utils;
- import org.apache.commons.lang.RandomStringUtils;
- import javax.crypto.*;
- import javax.crypto.spec.SecretKeySpec;
- import java.io.IOException;
- import java.io.UnsupportedEncodingException;
- import java.security.GeneralSecurityException;
- import java.security.InvalidKeyException;
- import java.security.InvalidParameterException;
- import java.security.NoSuchAlgorithmException;
- public class SecurityUtils {
- public static enum HmacAlgorithm {
- HMAC_MD5("HmacMD5"), HMAC_SHA1("HmacSHA1"), HMAC_SHA256("HmacSHA256"), HMAC_SHA384("HmacSHA384"), HMAC_SHA512(
- "HmacSHA512");
- private String algorithm;
- private HmacAlgorithm(String algorithm) {
- this.algorithm = algorithm;
- }
- public String getAlgorithm() {
- return algorithm;
- }
- }
- //AES加密方法
- public static final String AES_ECB_PKCS7 = "AES/ECB/PKCS7Padding";
- public static final String AES_ECB_PKCS5 = "AES/ECB/PKCS5Padding";
- public static final String AES_CBC_PKCS7 = "AES/CBC/PKCS7Padding";
- public static final String AES_CBC_PKCS5 = "AES/CBC/PKCS5Padding";
- public static byte[] encryptHMAC(String secret, String data, HmacAlgorithm algorithm) throws IOException {
- return encryptHMAC(secret.getBytes("utf-8"), data.getBytes("utf-8"), algorithm);
- }
- public static byte[] encryptHMAC(byte[] secret, byte[] data, HmacAlgorithm algorithm) throws IOException {
- byte[] bytes = null;
- try {
- SecretKey secretKey = new SecretKeySpec(secret, algorithm.getAlgorithm());
- Mac mac = Mac.getInstance(secretKey.getAlgorithm());
- mac.init(secretKey);
- bytes = mac.doFinal(data);
- } catch (GeneralSecurityException gse) {
- throw new IOException(gse.toString());
- }
- return bytes;
- }
- public static String byte2hex(byte[] bytes) {
- StringBuilder sign = new StringBuilder();
- for (byte aByte : bytes) {
- String hex = Integer.toHexString(aByte & 0xFF);
- if (hex.length() == 1) {
- sign.append("0");
- }
- sign.append(hex);
- }
- return sign.toString();
- }
- public static String generateSalt(int length) {
- return RandomStringUtils.random(length);
- }
- public static byte[] encryptWithAES128ECB(byte[] in, String key) throws UnsupportedEncodingException, NoSuchAlgorithmException,
- NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
- if (key == null || key.length() != 16) {
- throw new InvalidParameterException("key is invalid");
- }
- SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("utf-8"), "AES");
- Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
- cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
- return cipher.doFinal(in);
- }
- }
|