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

记得前些时候发过一篇文章,谈到某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  是 "/"

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


完。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,349评论 0 33
  • 9af0e05c6c75阅读 2,890评论 0 0
  • 《庄子》解,每章一读。 文: 宇泰定者,发乎天光。发乎天光者,人见其人,物见其物。人有脩者,乃今有恒;有恒者,人舍...
    千里飘蓬阅读 4,932评论 0 0
  • 骄阳似火的天气我们迎来了一学期最忙碌的时刻,与此同时也回顾着一学期丰富而充实的教育教学工作,那点点滴滴依...
    唯美儿阅读 4,251评论 0 4
  • 冬去春又来,眨眼间,又是一年深秋之季。 此时此刻,淮北人民路。静谧的深夜,窗外灯火朦胧。耳机里传来朴树轻柔忧伤迷离...
    蓉妃儿阅读 2,773评论 0 0