共计 1591 个字符,预计需要花费 4 分钟才能阅读完成。
上回说到
请先看第一回:https://blog.zixutech.cn/archives/664
本回
由于官方 2 天更新了 7 次,尤其是今天更新了 4 次,我人直接裂开,官方没有采用我的强加密手段,而是继续乱 jb 加密,但是更新频次如此之快,我也懒得搞了,本篇文章主要是分享一下期间几次更新的加解密算法,别说还挺有创意的。
算法代码
我已添加了详细的注释供读者们阅读学习,对代码有疑问可以评论提出。
// 宗教答题第 2~5 次更新的加密函数
function encrypt(content) {
// content 是要加密的值,宗教里就是题号 如 1000065
// 随机字符串 + # + 题号,拼接后进行 base64 编码
content = window.btoa('1688106372619ddf853ddce845744766#' + content)
// code 是要穿插在上述 content 里的内容,其内容是用户 ID(需经过 base64 解码) 和 csmpagerid(不知道这到底是啥)
let code = window.atob(memberusercode) + csmpagerid;
// 开始将 code 穿插进 content 进行混淆
for (let i = 0; i < code.length; i++) {
// 在 1 3 5 7 9 ··· 索引位置逐位插入 code 的内容
content = content.slice(0, 2 * i + 1) + code.slice(i, i + 1) + content.slice(2 * i + 1);
}
// 因为 content 是经过 base64 编码的,所以其最后可能会出现 === == = 这样的,如果有则替换为特定的字符串,这里是 O0O0OO0O0O
// 如果没有,则直接在后面加上这个 O0O0OO0O0O
if (content.indexOf('===') == -1 && content.indexOf('==') == -1 && content.indexOf('=') == -1) {content += 'O0O0OO0O0O';} else {content = content.replace('===', 'O0O0OO0O0O');
content = content.replace('==', 'O0O0OO0O0O');
content = content.replace('=', 'O0O0OO0O0O');
}
// 加密完成,返回数据
// console.log(content)
return content;
}
// 宗教答题第 2~5 次更新的解密函数
function decrypt(content) {
// content 要解密的内容,一般是题号,解密前的样子大概是
// M1T0A000N6j0I844N3j2c1y4M1T9Y8x8O5W9R8j0N6W1I9xdOcG5Qbx1N8zcIc4dM4z1I045M3j4Q240N7T1IjMTAwMDAwOQO0O0OO0O0O
// 设计一个新的字符串用来当做解密后的字符串
let newStr = ''
// 逐位循环去除混淆
for (let i = 0; i < content.length; i++) {
// 42 的意思是,用户 ID 的长度和 csmpagerid 的长度一共是 42 位,所以只需要去除 42 个字符即可
if (i >= 42) {
// 循环次数大于等于 42 后,直接不再裁剪,而是拼接最后所有字符串
newStr += content.slice(2 * i)
break
}
// 裁剪字符串,把第 0 2 4 6 8 10 ··· 位的混淆字符删掉
newStr += content.slice(2 * i, 2 * i + 1)
}
// 将结果进行 base64 解码,至此解密完成
newStr = window.atob(newStr)
// console.log(newStr)
}
结语
官方更新是好事,但是也请一次更新到位,用最好的技术来应对作弊,或者能给学生们一份题库用来背,也能达到学习的目的。
希望世上再无形式主义!
正文完
发表至: 未分类
2021-11-24