Java 开发中常用的 4 种加密方法

2年前 (2023) 程序员胖胖胖虎阿
145 0 0

点击上方 Java后端,选择设为星标

技术博文,及时送达
Java 开发中常用的 4 种加密方法

来源 | my.oschina.net/u/4139951/blog/3077236

作者 | 爱编程的浪子

一、工具类

1. md5加密工具类

2. base64加密工具类

3. Bcrypt工具类

二、加密测试

1. MD5加密测试

2. base64加密测试

3. SHA加密测试

4. BCrypt加密测试

一、工具类

1. md5加密工具类
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加密工具类
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工具类
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加密测试
/** * 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加密测试
/** * 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加密测试
/** * 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加密测试
/** * 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 }}


-END-
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「web_resource」,关注后回复「进群」或者扫描下方二维码即可进入无广告交流群。



扫描二维码进群↓
Java 开发中常用的 4 种加密方法





读 
1.  从零搭建创业公司后台技术栈 
2.  
如何阅读 Java 源码?
3.  某小公司RESTful、前后端分离的实践
4.  该如何弥补 GitHub 功能缺陷?

5.  团队开发中 Git 最佳实践

Java 开发中常用的 4 种加密方法


在看
 
Java 开发中常用的 4 种加密方法

本文分享自微信公众号 - Java后端(web_resource)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

版权声明:程序员胖胖胖虎阿 发表于 2023年3月21日 下午2:16。
转载请注明:Java 开发中常用的 4 种加密方法 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...