我在下面的JavaScript代码中找到了将字符串转换为混淆的base64字符串的方法。
但是如何将其转换回去?
function obbtoa(text) {
return btoa(text).replace(/=/gi, '_').replace(/\+/gi, '.').replace(/\//gi, '-');
}
function strobuscate(a) {
var t = parseInt((+new Date()).toString().substr(11)) || 1;
var y = ('0' + t.toString(16)).substr(-2);
return y + obbtoa(a.split('').map(function(e, i) {
return String.fromCharCode(e.charCodeAt(0) + i % t);
}).join(''));
}
console.log(strobuscate("123123123123ashdamkfhdksadhfklsadhf"));
//39MTM1NDY4Nzk7Ojw.bYB2c3F.fXl8eYGKeX2CgYeJkYCEiYg_
您必须反转每个操作并反转操作顺序。我将为您提供每项操作的详细信息,然后交给您进行实际的反转:
准备:
t = parseInt((+new Date()).toString().substr(11))
:它获取当前UTC时间戳的最后两位,也就是秒的第100位和第1000位。 || 1
仅用于错误处理,以防日期未提供有用的结果。y = ('0' + t.toString(16)).substr(-2)
:将先前的t
转换为基数16。0前缀和-2子字符串再次只是转义情况下的错误处理迷离:
a.split('').map(function(e, i) {
return String.fromCharCode(e.charCodeAt(0) + i % t);
}).join('')
:遍历输入字符串的每个字符并应用内部函数:t
的索引,并从该字符代码中返回一个字符串obbtoa
中:btoa
字符串y
放在结果字符串之前,因此解码可以知道t
和y
。了解逆转:
y
,将我们用来从y
计算t
以获得“我们的” t
]的运算反过来>btoa
-
而不是+
来反转char转换