密码学程序员大数据 爬虫Python AI Sql

某app生成数据库加密key的算法

2017-02-07  本文已影响230人  manmade

记得前些时候发过一篇文章,谈到某app 数据库加密算法用的是AES128,,当时偷懒,是直接打印的key, 没有研究其key 的生成算法,近日又看了看,发现其生成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); // 这句是关键

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  是 "/"

写个程序验证了一下,果然与打印的一致:

完。

上一篇下一篇

猜你喜欢

热点阅读