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"));
}
看下輸出:
正常了,天下太平!
相關推薦
Android與C後臺 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加密(Android與Java後臺可以正常加解密 )
本文采用的加密模式是AES-128-CBC,這種加密模式可以自己定義“金鑰”和“偏移量“。 程式碼如下,Android端及Java後臺都可以直接使用 import javax.crypto.Cipher; import javax.crypto.spec.I
android與C# 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 移動端是新手……
Android與C++ 使用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
Java與C#執行效率之不科學比較
中午吃飯,閒來無事,分別用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也