1. 程式人生 > >Android與C後臺 MD5加密不一致的問題

Android與C後臺 MD5加密不一致的問題

最近換了個比較扯淡的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 = "[email protected],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][email protected],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)/[email protected],c;";
          String test3 =encoder( s3);
          System.err.println("dd=" + test3);
          System.err.println("ee="+ "4c195f467e7238d58bffdcf9ae9074");
          System.out.println(test3.equals("4c195f467e7238d58bffdcf9ae9074")); 

        }

看下輸出:
這裡寫圖片描述
正常了,天下太平!

相關推薦

AndroidC後臺 MD5加密一致的問題

最近換了個比較扯淡的C後臺,登入密碼MD5加密想必大家都用到了,網上一大堆程式碼,聯調時發現問題了,操蛋的密碼和C後臺不一致,C後臺的MD5密碼高位不補0,網上大部分都是補零的,湊夠32位,問題由此而來

js MD5加密 java MD5加密一致

因為該專案會部署到多臺機器,所以需要用字元生成唯一的MD5,但是js生成的MD5和java生成的MD5不一致.經過博主查閱資料發現java生成MD5用的是utf-8的編碼,而且js用的是2進位制.那我就直接上程式碼了   MD5.js 可以直接複製 /* * A JavaScript

android RSA和Java RSA加密一致的坑

最近專案採用RSA進行加密,遇到了坑,記錄一下 1、BASE64Decoder在Android中是不存在的,需用Base64替換, BASE64Decoder base64Decoder= new B

安全安全003:C#實現MD5加密演算法

MD5是一種資訊-摘要演算法,一種單向函式演算法(也就是HASH演算法)。將不同輸入長度的資訊進行雜湊計算,得到固定長度的輸出。它的主要特點是,不可逆 和唯一性。即不能由結果計算出輸入值;且不同的輸入值計算得到的固定長度輸出是唯一的。 目前使用的面向物件程式語言中,基本都有類庫實現好的MD5方法

Android 通過JNI C++進行MD5加密

最近升級了Android Studio 3.0.1。版本升級,越是覺得好用了。 Android Studio使用JNI之前覺得是一件比較麻煩的事,官方文件也不多,有點無從下手。本篇以CMake方式說說如何利用JNI方式使用C++進行MD5加密,這樣經過

Aes加密AndroidJava後臺可以正常加解密 )

本文采用的加密模式是AES-128-CBC,這種加密模式可以自己定義“金鑰”和“偏移量“。 程式碼如下,Android端及Java後臺都可以直接使用 import javax.crypto.Cipher; import javax.crypto.spec.I

androidC# WebService基於ksoap通信(C#篇)

ldo art fadein length col scripts append hid ldoc 1.打開VS 2013新建項目>>ASP.NET空WEB應用程序(我用的是.net 4.0) 2.在剛建立的項目上加入新建項(Web

C語言md5加密

fop ble clu grant sts per lar pointer har md5.h #include <stdio.h> #include <string.h> /* POINTER defines a generic pointer

django之cookie值頁面顯示瀏覽器儲存的值一致問題

個人遇到的關於django的cookie問題: counter = int(request.COOKIES['count']) + 1 # del request.COOKIES['count'] # 刪除伺服器COOKIES if counter > 3: counter =

android Java後臺使用okGo除錯聯網心塞過程記錄

                        使用環境:        1 移動端是新手……    

AndroidC++ 使用socket傳輸資料

1. 使用C++ 建立socket server監聽 bool isBroadcastServerLanuch = false; bool isTcpTlsServerLanuch = false; int tcpSocketReceive_fd; void

使用mybatis查出資料mysql查出來的一致(order by)

最近在練習easyui的時候做到datagrid的時候 用到點選欄位進行 降序,升序 的時候發現無論怎麼點 資料都不會變, 開始以為是easyui-datagrid中配置錯了,改了半天也沒有發現.  然後去看了下mybatis發出的sql和查詢結果. 查出來才發現 不是easyui

解決java md5和php md5 結果一致問題

一、遇到問題 java md5的輸出結果和php md5的輸出結果不一致。 二、解決程式碼 java import java.security.MessageDigest; public cl

Java漢字md5一致問題

通過main方法測試得到一個加密值,通過servlet request呼叫得到一個加密值,都是加密相同的漢字,但是結果不同。 如果是加密英文,則不會有這種問題。 原因就在於漢字編碼,在加密時設定一下編碼UTF-8,問題解決。 public static String En

Linux下如何用C實現MD5加密

md5典型應用是對一段資訊(Message)產生資訊摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多軟體在下載的時候都有一個檔名相同,副檔名為.md5的檔案,在這個檔案中通常只有一行文字,大致結構如:MD5 (tanajiya.tar.gz)

ssm中mybatis處理資料庫(mysql)pojo屬性中型別一致(string轉date)

        一般在表設計的時候會考慮到資料庫欄位型別和java中屬性一致的問題,但是也有可能會出現一些情況導致型別不一致的問題,比如:二次開發中需求更改等。此時資料庫和java中的程式碼不能隨便更改,所以考慮的思路是通過typeHandler作為中間體來把型別轉換。  

解決spark-md5.js和java計算檔案md5一致問題

正確程式碼如下 java import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; impor

JavaC#執行效率之科學比較

中午吃飯,閒來無事,分別用Java和C#實現了一個計算PI值的類,執行次數相同,為了避免一些偶然誤差,姑設定了一個比較大的計算次數100000000,1億次! Java程式碼如下: import java.util.*; public class CalcPI{ public

C++實現md5加密(相容中文)

說明:由於呼叫了windows api來對中文進行了處理,所以暫僅支援windows #include <iostream> #include <windows.h> using namespace std; typedef unsigned cha

HBase中正則過濾表示式JAVA正則表示式一致問題的分析和解決

HBase提供了豐富的查詢過濾功能。 比如說它提供了RegexStringComparator這樣的函式,可以實現按照正則表示式進行過濾。它可以有效地彌補向前綴查詢這樣的機制,從而可以使hbase也