java wordpress密码加密
(1)wordpress密码加密后的密文格式: $P$B12345678huiyw4r7qhfuhs8yjmd6ef $P$912345678huiyw4r7qhfuhs8yjmd6ef 第一段:$P$格式固定 第二段:只有一个字符。若php版本大于5.0则为B,否则为9 第三段:8位salt 第四段:22位,真正加密后的密码 (2)密文的加密方法 php版本高于5.0
$hash = md5($salt . $password, TRUE); do { $hash = md5($hash . $password, TRUE); } while (--$count);
[注]“.”在php中是连接运算
参数TRUR表示加密结果取16位二进制 count取2的13次方:8192 php版本低于5.0$hash = pack('H*', md5($salt . $password)); do { $hash = pack('H*', md5($hash . $password)); } while (--$count);
[注]php低于5.0 md5返回的是32位十六进制字符串形式
pack(H*) 将md5结果转化为二进制 count取2的11次方:2048 上述方法得到的 $hash 再进行base64加密: (3)wordpress的base64算法 64位字符表比较特殊,与普通的字符表顺序有差异: itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; //input即hash,count=16String (String strString salt){ MessageDigest md{ md = MessageDigest.()[] hash = md.digest((salt + str).getBytes())[] palin = str.getBytes()(i = i < i++){ [] newplain = [hash.+ palin.]System.(hashnewplainhash.)System.(palinnewplainhash.palin.)MessageDigest md5 = MessageDigest.()hash = md5.digest(newplain)} [] x = [hash.](i = i < hash.i++){ x[i] = hash[i] & } + salt + (x)} (NoSuchAlgorithmException e) { e.printStackTrace()}}String ([] inputnumber){ String hash = output = [] input_2 = [number](i = i < numberi++) { input_2[i] = input[i]} String itoa64 = output_2 = len_2 = value_2 = (i = i<= number) { (i + < number) { value = input_2[++i]output_2 = (value << )output = output + output_2} value_2 = outputlen = Integer.(output).length()(len - > ) { output = (output >> )} { output = } value = outputhash += itoa64.substring((value % + )%(value % + )%+ )} { } (i + < number) { value = input_2[++i]output_2 = (value << )output = value_2 + output_2value_2 = outputlen_2 = Integer.(output).length()output_2 = outputoutput = (output >> )value = outputhash += itoa64.substring((value % + )%(value % + )%+ )} { } (i+< number) { len_2 = Integer.(output_2).length()output = (output_2 >> )value = outputhash += itoa64.substring((value % + )%(value % + )%+ )} } hash} //调用 Utils.WordpressEncrypt(pwd, member_db.getUserPass().substring(4,12)).equals(member_db.getUserPass())