Skip to content

Instantly share code, notes, and snippets.

@Borber
Created January 9, 2023 10:49
Show Gist options
  • Select an option

  • Save Borber/5032c53cb02dfe4aaea63673c00731d8 to your computer and use it in GitHub Desktop.

Select an option

Save Borber/5032c53cb02dfe4aaea63673c00731d8 to your computer and use it in GitHub Desktop.
斗鱼 js 加密 转换 rust
let cb = format!("{}{}{}220120200217", rid, DID, dt);
let rb = md5(&cb.as_bytes());
let mut re = vec![];
for i in 0..4 {
let s = &rb[i * 8..i * 8 + 8];
let u1 = i32::from_str_radix(&s[0..2], 16).unwrap();
let u2 = i32::from_str_radix(&s[2..4], 16).unwrap();
let u3 = i32::from_str_radix(&s[4..6], 16).unwrap();
let u4 = i32::from_str_radix(&s[6..8], 16).unwrap();
re.push((u1 & 0xff) | ((u2 << 8) & 0xff00) | ((u3 << 24) as u32 >> 8) as i32 | u4 << 24);
}
let k2 = [0x7c2717b7, 0x1f83b724, 0x471c00, 0x64957544];
let mut rre = vec![];
for i in 0..2 {
let mut v0 = re[i * 2] as i64;
let mut v1 = re[i * 2 + 1] as i64;
let mut sum: i64 = 0;
for j in 0..32 {
sum = sum.wrapping_add(0x9e3779b9);
v0 = v0.wrapping_add(
((v1 as i32).wrapping_shl(4).wrapping_add(k2[0])
^ (v1 as i32).wrapping_add(sum as i32)
^ ((v1 as u32).wrapping_shr(5) as i32).wrapping_add(k2[1]))
as i64,
);
v1 = v1.wrapping_add(
((v0 as i32).wrapping_shl(4).wrapping_add(k2[2])
^ (v0 as i32).wrapping_add(sum as i32)
^ ((v0 as u32).wrapping_shr(5) as i32).wrapping_add(k2[3]))
as i64,
);
}
rre.push(v0);
rre.push(v1);
}
let mut re = rre;
println!("re: {:#?}", re);
re[0] = ((re[0] as i32).wrapping_shr((k2[0] % 16) as u32)
| ((re[0] as i32).wrapping_shl((32 - (k2[0] % 16)) as u32))) as i64;
re[0] = re[0].wrapping_add(k2[2] as i64);
re[0] = re[0].wrapping_sub(k2[2] as i64);
re[1] = ((re[1] as i32).wrapping_shl((k2[1] % 16) as u32)
| ((re[1] as u32).wrapping_shr((32 - (k2[1] % 16)) as u32) as i32)) as i64;
re[1] = re[1].wrapping_sub(k2[3] as i64);
re[1] = ((re[1] as i32).wrapping_shl((k2[3] % 16) as u32)
| ((re[1] as u32).wrapping_shr((32 - (k2[3] % 16)) as u32) as i32)) as i64;
re[2] = ((re[2] as i32).wrapping_shl((k2[0] % 16) as u32)
| ((re[2] as u32).wrapping_shr((32 - (k2[0] % 16)) as u32) as i32)) as i64;
re[2] = ((re[2] as u32).wrapping_shl((k2[2] % 16) as u32) as i32
| (re[2] as i32).wrapping_shr((32 - (k2[2] % 16) as u32)) as i32) as i64;
re[2] = ((re[2] as u32).wrapping_shr((k2[0] % 16) as u32) as i32
| (re[2] as i32).wrapping_shl((32 - (k2[0] % 16)) as u32) as i32) as i64;
re[2] = ((re[2] as i32).wrapping_shl((k2[2] % 16) as u32)
| (re[2] as u32).wrapping_shr((32 - (k2[2] % 16)) as u32) as i32) as i64;
re[2] = ((re[2] as i32) ^ k2[2]) as i64;
re[3] = ((re[3] as u32).wrapping_shr((k2[1] % 16) as u32) as i32
| (re[3] as i32).wrapping_shl((32 - (k2[1] % 16)) as u32)) as i64;
re[3] = re[3].wrapping_sub(k2[3] as i64);
re[3] = ((re[3] as i32).wrapping_shl((k2[3] % 16) as u32)
| (re[3] as u32).wrapping_shr((32 - (k2[3] % 16) as u32)) as i32) as i64;
re[0] = re[0].wrapping_add(k2[0] as i64);
re[0] = re[0].wrapping_sub(k2[2] as i64);
re[0] = ((re[0] as u32).wrapping_shr((k2[2] % 16) as u32) as i32
| (re[0] as i32).wrapping_shl((32 - (k2[2] % 16)) as u32)) as i64;
re[1] = re[1].wrapping_add(k2[1] as i64);
re[1] = ((re[1] as u32).wrapping_shr((k2[3] % 16) as u32) as i32
| (re[1] as i32).wrapping_shl((32 - (k2[3] % 16)) as u32)) as i64;
re[1] = re[1].wrapping_add(k2[3] as i64);
re[1] = re[1].wrapping_sub(k2[3] as i64);
re[2] = ((re[2] as u32).wrapping_shr((k2[0] % 16) as u32) as i32
| (re[2] as i32).wrapping_shl((32 - (k2[0] % 16)) as u32)) as i64;
re[2] = ((re[2] as i32) ^ k2[2]) as i64;
re[2] = ((re[2] as i32).wrapping_shl((k2[2] % 16) as u32)
| (re[2] as u32).wrapping_shr((32 - (k2[2] % 16)) as u32) as i32) as i64;
re[3] = re[3].wrapping_sub(k2[1] as i64);
re[3] = re[3].wrapping_sub(k2[3] as i64);
re[3] = re[3].wrapping_sub(k2[3] as i64);
re[3] = ((re[3] as i32) ^ k2[3]) as i64;
println!("{:#?}", re);
let hc = [
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f",
];
let mut result = vec![];
for i in 0..re.len() {
let mut s = String::new();
for j in 0..4 {
s = format!(
"{}{}{}",
s,
hc[((re[i] as i32).wrapping_shr((j * 8 + 4) as u32) & 15) as usize],
hc[((re[i] as i32).wrapping_shr((j * 8) as u32) & 15) as usize],
);
}
result.push(s);
}
println!("{}", result.join("").to_string());
result.join("").to_string()
// "".to_owned()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment