JAVA開発における4つの暗号化方法を簡単に理解できます


文書ディレクトリ
一、工具類
  • md 5暗号化ツールクラス
  • base 64暗号化ツールクラス
  • Bcryptツールクラス
  • 二、暗号化テスト
  • MD 5暗号化テスト
  • base 64暗号化テスト
  • SHA暗号化テスト
  • 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   
        }
    }