zoukankan      html  css  js  c++  java
  • java字符串加密解密

    java字符串加密解密

        字符串加密解密的方式很多,每一种加密有着相对的解密方法。下面要说的是java中模拟php的pack和unpack的字符串加密解密方法。

    java模拟php中pack:

     1 /**
     2      * 十六进制转中文字符串
     3      */
     4     public static String decodeString(String str) {
     5         if ( str == null ) {
     6             return "转换失败";
     7         }
     8         byte[] s = pack(str); //十六进制转byte数组
     9         String gbk;
    10         try {
    11             gbk = new String(s, "gbk"); //byte数组转中文字符串
    12         } catch ( UnsupportedEncodingException ignored ) {
    13             gbk = "转换失败";
    14         }
    15         return gbk;
    16     }
     1 /**
     2      * 十六进制转byte数组,模拟php中pack
     3      */
     4     public static byte[] pack(String str) {
     5         int nibbleshift = 4;
     6         int position = 0;
     7         int len = str.length() / 2 + str.length() % 2;
     8         byte[] output = new byte[len];
     9         for (char v : str.toCharArray()) {
    10             byte n = (byte) v;
    11             if (n >= '0' && n <= '9') {
    12                 n -= '0';
    13             } else if (n >= 'A' && n <= 'F') {
    14                 n -= ('A' - 10);
    15             } else if (n >= 'a' && n <= 'f') {
    16                 n -= ('a' - 10);
    17             } else {
    18                 continue;
    19             }
    20             output[position] |= (n << nibbleshift);
    21             if (nibbleshift == 0) {
    22                 position++;
    23             }
    24             nibbleshift = (nibbleshift + 4) & 7;
    25         }
    26         return output;
    27     }

    java模拟php中unpack:

     1 /**
     2      * 中文字符串转十六进制
     3      */
     4     public static String decodeShiLiu(String str) {
     5         if ( str == null ) {
     6             return "转换失败";
     7         }
     8         String gbk;
     9         try {
    10             byte[] sss = str.getBytes("GBK");  //中文字符串转byte数组
    11             gbk = unpack(sss); // byte数组转十六进制
    12         } catch ( Exception E ) {
    13             gbk = "转换失败";
    14         }
    15         return gbk;
    16     }
     1 /**
     2      * byte数组转十六进制,模拟php中unpack
     3      */
     4     public static String unpack(byte[] bytes) {
     5         StringBuilder stringBuilder = new StringBuilder("");
     6         if (bytes == null || bytes.length <= 0) {
     7             return null;
     8         }
     9         for (int i = 0; i < bytes.length; i++) {
    10             int v = bytes[i] & 0xFF;
    11             String hv = Integer.toHexString(v);
    12             if (hv.length() < 2) {
    13                 stringBuilder.append(0);
    14             }
    15             stringBuilder.append(hv);
    16         }
    17         return stringBuilder.toString();
    18     }

    对其进行实例:

    1 public static void main(String[] args) throws ParseException{
    2 
    3         System.out.println(decodeString("b2a9bfcdd4b0d6d0cec4"));
    4         System.out.println(decodeShiLiu("博客园中文"));
    5     }

    输出结果:

     博客园中文

    b2a9bfcdd4b0d6d0cec4 

  • 相关阅读:
    CodingTrip
    CodingTrip
    Linux下面查找含有特定的字符的文件
    Linux下TCP/IP协议的Socket编程
    显示Apache服务器里面访问量排在前10的ip地址
    c语言的详细编译过程
    WebStorm设置编辑器中的字体大小
    Sublime多行编辑快捷键
    Aptana 中去掉“Missing semicolon”提醒
    公认的媒体类型
  • 原文地址:https://www.cnblogs.com/heqiyoujing/p/9303291.html
Copyright © 2011-2022 走看看