AES,SHA,SHA1,MD5加密及解密技术
2017-12-11 09:59
357 查看
package com.gant.encrypt; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; 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; /** * @ClassName Encrypt * @Description 加密技术 * @author chao * @date 2017年12月11日 * @version 1.0 */ public class Encrypt { public static void main(String[] args) { encryptSHA1("彭超"); encryptMD5("彭超"); getMD5("彭"); } /** * @Description AES加密方式 * @param str * 待加密的字符串 * @param secretKeyBase * 用于生成秘钥的基础字符串 * @return byte[] 加密字节数组 */ public static byte[] encryptAES(String str, String secretKeyBase) { try { KeyGenerator keyGenerator; keyGenerator = KeyGenerator.getInstance("AES"); keyGenerator.init(128, new SecureRandom(secretKeyBase.getBytes())); SecretKey secretKey = keyGenerator.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec sks = new SecretKeySpec(enCodeFormat, "AES"); Cipher cipher = Cipher.getInstance("AES"); // 创建密码器 byte[] byteContent = str.getBytes("UTF-8"); cipher.init(Cipher.ENCRYPT_MODE, sks); // 初始化 byte[] result = cipher.doFinal(byteContent); System.out.println("加密后的结果是:" + result); return result; } catch (IllegalBlockSizeException | BadPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; } /** * @Description AES解密 * @param bytes * 待解密的字节数组 * @param secretKeyBase * 用于生成密钥的基础字符串, 需要注意的是AES是对称加密,所以secretKeyBase在加密解密时要一样的 * @return 解密后的字符串 */ public static String decryptAES(byte[] bytes, String secretKeyBase) { try { KeyGenerator keGenerator = KeyGenerator.getInstance("AES"); keGenerator.init(128, new SecureRandom(secretKeyBase.getBytes())); SecretKey secretKey = keGenerator.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec sks = new SecretKeySpec(enCodeFormat, "AES"); Cipher cipher = Cipher.getInstance("AES"); // 创建密码器 cipher.init(Cipher.DECRYPT_MODE, sks); // 初始化 String result = n 4000 ew String(cipher.doFinal(bytes), "UTF-8"); System.out.println("解密后的结果为:" + result.toUpperCase()); return result.toUpperCase(); } catch (UnsupportedEncodingException | IllegalBlockSizeException | BadPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } /** * @Description SHA,SHA1加密(不可逆,不能解密) * @param str * 待加密的字符串 * @return String 加密后的字符串 */ public static String encryptSHA1(String str) { try { MessageDigest messageDigest = MessageDigest.getInstance("SHA-1"); // 如果是SHA加密只需将"SHA-1"改成"SHA" messageDigest.update(str.getBytes()); byte messageDigestArray[] = messageDigest.digest(); StringBuffer hexStr = new StringBuffer(); // 以下是将字节数组转换为16进制数组 for (int i = 0; i < messageDigestArray.length; i++) { String shaHex = Integer.toHexString(messageDigestArray[i] & 0xFF); // & 0xFF解释 // :计算机存储数据机制:正数存储的二进制原码,负数存储的是二进制的补码 if (shaHex.length() < 2) { hexStr.append(0); } hexStr.append(shaHex); } System.out.println("SHA1加密后的结果是:" + hexStr.toString().toUpperCase()); return hexStr.toString().toUpperCase(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return str; } /** * @Description MD5加密(不可逆,不能解密) * @param str * 待加密字符串 * @return String 加密后的字符串 */ public static String encryptMD5(String str) { try { // 获取MD5摘要算法的 MessageDigest对象 MessageDigest messageDigest = MessageDigest.getInstance("MD5"); // 使用指定的字节更新摘要 messageDigest.update(str.getBytes("UTF-8")); // 获取密文 byte md[] = messageDigest.digest(); // 把密文转换为16进制的字符串 StringBuffer hexString = new StringBuffer(); // 字节数组转换为16进制数 for (int i = 0; i < md.length; i++) { String mdHex = Integer.toHexString(md[i] & 0xFF); if (mdHex.length() < 2) { hexString.append(0); } hexString.append(mdHex); } System.out.println("MD5加密后的结果是:" + hexString.toString().toUpperCase()); return hexString.toString().toUpperCase(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } }
相关文章推荐
- AES加密解密 SHA1、SHA加密 MD5加密
- NET实现RSA AES DES 字符串 加密解密以及SHA1 MD5加密
- 常用加解密工具类(MD5、SHA、DES、AES、RSA)
- AES加密解密&&SHA1、SHA加密&&MD5加密
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
- 7.java 加解密技术系列之 AES
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
- AES加密解密&&SHA1、SHA加密&&MD5加密
- Crypto++入门学习笔记(DES、AES、RSA、SHA-256)(加解密)
- Java 加解密技术系列之 SHA
- 常用加解密工具类(MD5、SHA、DES、AES、RSA)
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
- 【转】asp.net(c#)加密解密算法之sha1、md5、des、aes实现源码详解
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
- Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密
- 3des,aes,md5加密解密方法
- AES加密解密&&SHA1、SHA加密&&MD5加密
- MD5,sha1,sha,AES加密
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密