記得前些時候發(fā)過一篇文章,談到某app 數(shù)據(jù)庫加密算法用的是AES128,韧衣,當時偷懶湿痢,是直接打印的key, 沒有研究其key 的生成算法,近日又看了看台囱,發(fā)現(xiàn)其生成key的算法如下:
public static finalString genCipherKey() {
try{
StringBuilder sb =newStringBuilder();
sb.append(Build.MODEL).append(SEPERATOR).append(Build.CPU_ABI).append(SEPERATOR).append(Build.BOARD).append(SEPERATOR).append(Build.HARDWARE).append(SEPERATOR).append(Build.DEVICE); // 這句是關(guān)鍵
String raw = sb.toString();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(raw.getBytes());
returna(md.digest());
}catch(Throwable th) {
return null;
}
}
private staticString a(byte[] src) {
if(src ==null|| src.length<=0) {
returnSTRING_EMPTY;
}
StringBuilder hex =newStringBuilder(src.length*2);
byte[] temp = src;
intlen$ = src.length;
for(inti =0; i < len$; i++) {
intv = temp[i] &255;
if(v <16) {
hex.append(ATTACHMENT_DOWNLOAD_FILE_TYPE_NORMAL);
}
hex.append(Integer.toHexString(v));
}
returnhex.toString();
}
就是把手機的各種信息用 ”/" 連接成一個字符串淡溯,然后取其md5 值。 若key 小于16位簿训, 則于字符串"0" 補足16位
sb.append(Build.MODEL).append(SEPERATOR).append(Build.CPU_ABI).append(SEPERATOR).append(Build.BOARD).append(SEPERATOR).append(Build.HARDWARE).append(SEPERATOR).append(Build.DEVICE);?
SEPERATOR ?是 "/"
寫個程序驗證了一下咱娶,果然與打印的一致:
完。