欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java单向加密,双向加密解密方法介绍,收藏以后开发中必定有用

程序员文章站 2022-05-12 21:09:11
...

今天来给大家讲解一下,java如何进行加密解密的,这里面包含java的单向加密解密比如MD5等等,也包含java的双向加密解密方式,比如base64格式的等等,首先先给大家介绍一下大体的加密方法,然后再对具体的给出一些实例:
1.md5/hash加密算法(单向加密)
2.单匙密码*:DES
3.数字签名
4.非对称密匙密码*(公匙体系)
5.base64式双向加密解密法:
例如:
 

/ * 编码原理:将3个字节转换成4个字节( (3 X 8) = 24 = (4 X 6) )
      * 先读入3个字节,每读一个字节,左移8位,再右移四次,每次6位,这样就有4个字节了
      *
      * @param data
      * @return 编码后的Base64字符串
      */
     public static String Base64Encode(byte[] data) {
         StringBuilder builder = new StringBuilder();
         int[] temp = new int[4];
         int len = data.length - data.length % 3;
         for (int i = 0; i < len; i += 3) {
             int goal = 0;
             for (int j = 0; j < 3; j++) {
                 goal <<= 8;
                 goal |= (data[i + j] & 0xff);
             }
             for (int k = 0; k < 4; k++) {
                 temp[k] = goal & 0x3f;
                goal >>= 6;
             }
             for (int k = 3; k >= 0; k--) {
                 builder.append(base64_alphabet.charAt(temp[k]));
             }
         }
         int index;
         switch (data.length % 3) {
         case 1:
             index = data[data.length - 1] >> 2;
             builder.append(base64_alphabet.charAt(index));
             index = (data[data.length - 1] & 0x03) << 4;
             builder.append(base64_alphabet.charAt(index));
             builder.append("==");
             break;
         case 2:
             index = data[data.length - 1 - 1] >> 2;
             builder.append(base64_alphabet.charAt(index));
             index = (data[data.length - 1 - 1] & 0x03) << 4
                     | data[data.length - 1] >> 4;
             builder.append(base64_alphabet.charAt(index));
             index = (data[data.length - 1] & 0x0f) << 2;
             builder.append(base64_alphabet.charAt(index));
             builder.append('=');
             break;
         }
         return builder.toString();
     }
 
     /**
      * 解码原理:将4个字节转换成3个字节. 先读入4个6位(用或运算),每次左移6位,再右移3次,每次8位.
      *
      * @param data
      *            需解码的Base64字符串。
      * @return byte[]-解码出的字节数组
      */
     public static byte[] Base64Decode(String data) {
         char[] chArray = data.toCharArray();
         int len = chArray.length;
         byte[] result = new byte[len * 3 / 4];
         for (int i = 0, res_i = 0; i < len; i += 4, res_i += 3) {
             int goal = 0;
             int index = 0;
             for (int k = 0; k < 4; k++) {
                 index = base64_alphabet.indexOf(chArray[i + k]);
                 goal <<= 6;
                 goal |= index;
             }
             for (int j = 2; j >= 0; j--) {
                 result[res_i + j] = (byte) goal;
                 goal >>= 8;
             }
         }
         // 等号=的处理
         if (chArray[len - 1] != '=')
             return result;
         else if (chArray[len - 2] == '=')
             return Arrays.copyOf(result, result.length - 2);
         else
             return Arrays.copyOf(result, result.length - 1);
 
     }
 // 将 s 进行 BASE64 编码
     public static String getBASE64(String s) {
         if (s == null)
             return null;
         return Base64Encode(s.getBytes());
     }
 
     // 将 BASE64 编码的字符串 s 进行解码
     public static String getFromBASE64(String s) {
         if (s == null)
             return null;
         try {
             byte[] b = Base64Decode(s);
             return new String(b);
         } catch (Exception e) {
             return null;
         }
     }

 

6.URLEncoder双向加密解密方式
好了,具体的就先给大家如果大家想看具体的更多的加密方法推荐大家可以去59biye网,查看java加密解密的方法总结