美文网首页项目
Java 开发中常用的 4 种加密方法

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

作者: coder_girl | 来源:发表于2019-10-14 16:55 被阅读0次

一、工具类

  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];    
}
}
  1. 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));    
}
}
  1. 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
  }
}
  1. 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);//我是一个字符串
  }
}
  1. 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
  }
}
  1. 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  
     }
}

相关文章

网友评论

    本文标题:Java 开发中常用的 4 种加密方法

    本文链接:https://www.haomeiwen.com/subject/gdnrmctx.html