Android与C后台 MD5加密不一致的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jielundewode/article/details/79042756

最近换了个比较扯淡的C后台,登录密码MD5加密想必大家都用到了,网上一大堆代码,联调时发现问题了,操蛋的密码和C后台不一致,C后台的MD5密码高位不补0,网上大部分都是补零的,凑够32位,问题由此而来!
直接上代码吧:

  /**
         * 通过MD5算法加密;
         * @param pwd
         */
        private static String encoder(String pwd) {
            try {

                //1指定算法类型;
                MessageDigest digest =MessageDigest.getInstance("MD5");
                //2将需要加密的字符串转换成byte数组;
                //注意我们后台编码时Unicode,此处编码根据后台编码走
                byte[] bs = digest.digest(pwd.getBytes("UTF-16LE"));
                //3通过遍历bs 生成32位的字符串;

                //最后字符串有个拼接的过程;
                StringBuffer sb =new StringBuffer();
                for (byte b : bs) {
                    int i=b&0xff; //int 类型的i 是4个字节占32位;
                    //int 类型的i转换成16进制字符;
                    String hexString = Integer.toHexString(i);
//                  if (hexString.length()<2) {//补零的过程,因为生成的时候有的是一位有的是两位所以需要有个补零的过程;
//                      hexString="0"+hexString;
//                  }
                    sb.append(hexString);
                }

                return sb.toString() ;

            } catch ( Exception e) {//找不到指定算法的错误;
                // TODO Auto-generated catch block
                e.printStackTrace();
                return "";
            }


        }

测试代码如下:

public static void main(String[] args)  {
//      /.a@b,c;
            String s = "123456.a@b,c;";
            String test1 =encoder( s);
            System.err.println("dd=" + test1);
            System.err.println("ee="+ "83c699114729d7d168e748b52882f31");
          System.out.println(test1.equals("83c699114729d7d168e748b52882f31")); 

          System.err.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
          String s1="*)897+-=_}{|\"/.'p]lhlKGHdf1453..a@b,c;";
          String test2 =encoder( s1);
            System.err.println("dd=" + test2);
            System.err.println("ee="+ "832179b8eae58adbe5824c7d41a9f778");
          System.out.println(test2.equals("832179b8eae58adbe5824c7d41a9f778")); 

          System.err.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
          String s3="中文12~5)/-.a@b,c;";
          String test3 =encoder( s3);
          System.err.println("dd=" + test3);
          System.err.println("ee="+ "4c195f467e7238d58bffdcf9ae9074");
          System.out.println(test3.equals("4c195f467e7238d58bffdcf9ae9074")); 

        }

看下输出:
这里写图片描述
正常了,天下太平!

猜你喜欢

转载自blog.csdn.net/jielundewode/article/details/79042756