上回说到
请先看第一回: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) }
结语
官方更新是好事,但是也请一次更新到位,用最好的技术来应对作弊,或者能给学生们一份题库用来背,也能达到学习的目的。
希望世上再无形式主义!
发表回复