JAVA開発における4つの暗号化方法を簡単に理解できます
文書ディレクトリ
一、工具類 md 5暗号化ツールクラス base 64暗号化ツールクラス Bcryptツールクラス 二、暗号化テスト MD 5暗号化テスト base 64暗号化テスト SHA暗号化テスト BCrypt暗号化テスト 一、工具類
1.md 5暗号化ツールクラス
2.base 64暗号化ツールクラス
3.Bcryptツールクラス
二、暗号化テスト
1.MD 5暗号化テスト
2.base 64暗号化テスト
3.SHA暗号化テスト
4.BCrypt暗号化テスト
一、工具類
1.md 5暗号化ツールクラス
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.base 64暗号化ツールクラス
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 Bcrypt(final String encryptSource) {
String salt = BCrypt.gensalt(SALT_SEED);
Map bcryptResult = Bcrypt(salt, encryptSource);
return bcryptResult;
}
/**
*
* @param salt encrypt salt, Must conform to the rules
* @param encryptSource
* @return
*/
public static Map 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 bcryptResult = new HashMap();
bcryptResult.put(SALT_KEY, salt);
bcryptResult.put(CIPHER_KEY, cipher);
return bcryptResult;
}
}
二、暗号化テスト
1.MD 5暗号化テスト
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.base 64暗号化テスト
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 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 bcrypt2 = BcryptCipher.Bcrypt(bcrypt.get("salt"),string);
System.out.println(bcrypt2.get("SALT_KEY")); //null
System.out.println(bcrypt2.get("CIPHER_KEY")); //null
}
}