Java中常用的 4 种加密方式(MD5+Base64+SHA+BCrypt)

 更新时间:2019年10月22日 22:26  点击:415

一、工具类

 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];
 }
}

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));
 }
}

 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;
 }
  
}

二、加密测试

MD5加密测试 

/**
 * MD5加密
 */
public class MD5Test {
 public static void main(String[] args) {
 String string = "你好 世界";
 String byteArrayToHexString = MD5Utils.byteArrayToHexString(string.getBytes());
 System.out.println(byteArrayToHexString);//e68891e698afe4b880e58fa5e8af9d
  
 }
}

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);//你好 世界
  
 }
}

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
  
 }
}

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
 }
}


[!--infotagslink--]

相关文章

  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • vue接口请求加密实例

    这篇文章主要介绍了vue接口请求加密实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-12
  • AES加密解密的例子小结

    关于AES加密的算法我们就不说了,这里主要给各位演示了三个关于AES算法实现的加密例子,希望本文章能给你带来帮助。 话不多说,先放上代码,一共有两个文件:AES.php(aes算...2016-11-25
  • node.JS md5加密中文与php结果不一致怎么办

    这次文章要给大家介绍的是node.JS md5加密中文与php结果不一致怎么办,不知道具体解决办法的下面跟小编一起来看看。 因项目需要,需要Node.js与PHP做接口调用,发现nod...2017-07-06
  • NODE.JS加密模块CRYPTO常用方法介绍

    使用require('crypto')调用加密模块。加密模块需要底层系统提供OpenSSL的支持。它提供了一种安全凭证的封装方式,可以用于HTTPS安全网络以及普通HTTP连接。该模块还提供了一套针对OpenSSL的hash(哈希),hmac(密钥哈希),cipher...2014-06-07
  • C#连接加密的Sqlite数据库的方法

    对数据加密分两种,一种是对数据库本身进行加密,另一种是对数据表中的数据进行加密,下面通过本文给大家介绍C#连接加密的Sqlite数据库的方法,感兴趣的朋友一起看看吧...2020-06-25
  • C#实现对文件进行加密解密的方法

    这篇文章主要介绍了C#实现对文件进行加密解密的方法,涉及C#加密与解密的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • php使用异或实现的加解密的方法

    若a=b ^ c;则b=a ^ c (^是异或的意思),php在处理异或的字符时先把字符转化为二进制的ascii值,对这些值进行异或,获取结果后在将ascii值转化为字符...2013-09-26
  • go语言使用RC4加密的方法

    这篇文章主要介绍了go语言使用RC4加密的方法,实例分析了RC4加密的技巧与实现方法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-05-07
  • C#为配置文件加密的实现方法

    这篇文章主要介绍了C#为配置文件加密的实现方法,可实现对配置文件中的敏感信息进行加密,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • c#实现md5加密示例

    这篇文章主要介绍了md5加密,加密结果可以为32位、48位、64位,只要修改一下参数就可以实现...2020-06-25
  • C#编写的Base64加密和解密类

    本文给大家汇总介绍了几种C#编写的Base64加密和解密类的代码,从简单到复杂,都能够实现功能,有需要的小伙伴根据自己的项目需求参考下吧。...2020-06-25
  • C#实现的MD5加密功能与用法示例

    这篇文章主要介绍了C#实现的MD5加密功能与用法,结合实例形式分析了C# MD5加密类的定义与使用方法,需要的朋友可以参考下...2020-06-25
  • C#实现对AES加密和解密的方法

    C#实现对AES加密和解密的方法,需要的朋友可以参考一下...2020-06-25
  • 微信小程序 MD5加密登录密码详解及实例代码

    这篇文章主要介绍了微信小程序 MD5加密登录密码详解及实例代码的相关资料,这里附有实例代码,需要的朋友可以参考下...2017-01-16
  • C# 实现对PPT文档加密、解密及重置密码的操作方法

    这篇文章主要介绍了C# 实现对PPT文档加密、解密及重置密码的操作方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 分析网页的几种加密技术

      现在专业性的网站越来越多,许多网友们都在网上建立起了自己的小家。不过辛辛苦苦制作的网页被人拿去改头换面却是件非常痛心的事,所以大家都想保护自己独创的...2016-09-20
  • c#文本加密程序代码示例

    这是一个加密软件,但只限于文本加密,加了窗口控件的滑动效果,详细看下面的代码...2020-06-25
  • Android使用RSA加密实现接口调用时的校验功能

    这篇文章主要介绍了Android+Java使用RSA加密实现接口调用时的校验功能,帮助大家更好的利用Android进行开发,感兴趣的朋友可以了解下...2020-12-24
  • PHP中的 Mcrypt 可逆加密算法

    PHP中的 Mcrypt 可逆加密算法 <?php教程 $td = mcrypt_module_open(MCRYPT_DES,'','ecb',''); //使用MCRYPT_DES算法,ecb模式 $iv = mcrypt_create_iv(...2016-11-25