一文让你轻松了解JAVA开发中的四种加密方法
发布时间:2020-12-15 01:58:43 所属栏目:Java 来源:网络整理
导读:文章目录 一、工具类 md5加密工具类 base64加密工具类 Bcrypt工具类 二、加密测试 MD5加密测试 base64加密测试 SHA加密测试 BCrypt加密测试 一、工具类 1. md5加密工具类 package 加密Tester.util;import java.security.MessageDigest;public class MD5Utils
文章目录
一、工具类
二、加密测试
一、工具类1. md5加密工具类package 加密Tester.util; import java.security.MessageDigest; public class MD5Utils { private static final String hexDigIts[] = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}; /** * MD5加密 * @param origin 字符 * @param charsetname 编码 * @return */ public static String MD5Encode(String origin,String charsetname){ String resultString = null; try{ resultString = new String(origin); MessageDigest md = MessageDigest.getInstance("MD5"); if(null == charsetname || "".equals(charsetname)){ resultString = byteArrayToHexString(md.digest(resultString.getBytes())); }else{ resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname))); } }catch (Exception e){ } return resultString; } public static String byteArrayToHexString(byte b[]){ StringBuffer resultSb = new StringBuffer(); for(int i = 0; i < b.length; i++){ resultSb.append(byteToHexString(b[i])); } return resultSb.toString(); } public static String byteToHexString(byte b){ int n = b; if(n < 0){ n += 256; } int d1 = n / 16; int d2 = n % 16; return hexDigIts[d1] + hexDigIts[d2]; } } 2. base64加密工具类package 加密Tester.util; import org.apache.commons.codec.binary.Base64; import java.io.UnsupportedEncodingException; public class Base64Util { // 字符串编码 private static final String UTF_8 = "UTF-8"; /** * 加密字符串 * @param inputData * @return */ public static String decodeData(String inputData) { try { if (null == inputData) { return null; } return new String(Base64.decodeBase64(inputData.getBytes(UTF_8)),UTF_8); } catch (UnsupportedEncodingException e) { } return null; } /** * 解密加密后的字符串 * @param inputData * @return */ public static String encodeData(String inputData) { try { if (null == inputData) { return null; } return new String(Base64.encodeBase64(inputData.getBytes(UTF_8)),UTF_8); } catch (UnsupportedEncodingException e) { } return null; } public static void main(String[] args) { System.out.println(Base64Util.encodeData("我是中文")); String enStr = Base64Util.encodeData("我是中文"); System.out.println(Base64Util.decodeData(enStr)); } } 3. Bcrypt工具类package 加密Tester.util; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.mindrot.bcrypt.BCrypt; public class BcryptCipher { // generate salt seed private static final int SALT_SEED = 12; // the head fo salt private static final String SALT_STARTSWITH = "$2a$12"; public static final String SALT_KEY = "salt"; public static final String CIPHER_KEY = "cipher"; /** * Bcrypt encryption algorithm method * @param encryptSource * need to encrypt the string * @return Map,two values in Map,salt and cipher */ public static Map<String,String> Bcrypt(final String encryptSource) { String salt = BCrypt.gensalt(SALT_SEED); Map<String,String> bcryptResult = Bcrypt(salt,encryptSource); return bcryptResult; } /** * * @param salt encrypt salt,Must conform to the rules * @param encryptSource * @return */ public static Map<String,String> Bcrypt(final String salt,final String encryptSource) { if (StringUtils.isBlank(encryptSource)) { throw new RuntimeException("Bcrypt encrypt input params can not be empty"); } if (StringUtils.isBlank(salt) || salt.length() != 29) { throw new RuntimeException("Salt can‘t be empty and length must be to 29"); } if (!salt.startsWith(SALT_STARTSWITH)) { throw new RuntimeException("Invalid salt version,salt version is $2a$12"); } String cipher = BCrypt.hashpw(encryptSource,salt); Map<String,String> bcryptResult = new HashMap<String,String>(); bcryptResult.put(SALT_KEY,salt); bcryptResult.put(CIPHER_KEY,cipher); return bcryptResult; } } 二、加密测试1. MD5加密测试package 加密Tester; import 加密Tester.util.MD5Utils; /** * MD5加密 */ public class MD5Test { public static void main(String[] args) { String string = "我是一句话"; String byteArrayToHexString = MD5Utils.byteArrayToHexString(string.getBytes()); System.out.println(byteArrayToHexString);//e68891e698afe4b880e58fa5e8af9d } } 2. base64加密测试package 加密Tester; import java.util.Base64; import 加密Tester.util.Base64Util; /** * base64加密 */ public class Bast64Tester { public static void main(String[] args) { String string = "我是一个字符串"; String encodeData = Base64Util.encodeData(string); //加密 String decodeData = Base64Util.decodeData(encodeData); //解密 System.out.println(encodeData);//5oiR5piv5LiA5Liq5a2X56ym5Liy System.out.println(decodeData);//我是一个字符串 } } 3. SHA加密测试package 加密Tester; import org.apache.commons.codec.digest.Sha2Crypt; /** * SHA加密 */ public class ShaTest { public static void main(String[] args) { String string = "我是一句话"; String sha256Crypt = Sha2Crypt.sha256Crypt(string.getBytes()); System.out.println(sha256Crypt);//$5$AFoQTeyt$TiqmobvcQXjXaAQMYosAAO4KI8LfigZMGHzq.Dlp4NC } } 4. BCrypt加密测试package 加密Tester; import java.security.SecureRandom; import java.util.Map; import java.util.UUID; import 加密Tester.util.BcryptCipher; import 加密Tester.util.MD5Utils; /** * BCrypt加密 */ public class BCryptTest { public static void main(String[] args) { String string = "我是一句话"; Map<String,String> bcrypt = BcryptCipher.Bcrypt(string); System.out.println(bcrypt.keySet()); //[cipher,salt] System.out.println(bcrypt.get("cipher")); //$2a$12$ylb92Z84gqlrSfzIztlCV.dK0xNbw.pOv3UwXXA76llOsNRTJsE/. System.out.println(bcrypt.get("salt")); //$2a$12$ylb92Z84gqlrSfzIztlCV. Map<String,String> bcrypt2 = BcryptCipher.Bcrypt(bcrypt.get("salt"),string); System.out.println(bcrypt2.get("SALT_KEY")); //null System.out.println(bcrypt2.get("CIPHER_KEY")); //null } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 微信支付java版本之获取Access_token
- 在jmeter的beanshell中用java获取系统当前时间的简单实例
- Using Headless Mode in the Java SE Platform--转
- RzGroupBar
- 如何使用JavaFX中的CSS制作动画?
- java – 如何保护android中的sqlite db免遭被盗
- java – 算法:混合MergeSort和InsertionSort执行时间
- java – 在IntelliJ IDEA中查找注释
- java – 为什么ArrayStoreException是RuntimeException?
- 检查来自Java的5百万行文件的唯一行数据