河南宗教知识竞赛加密算法分析(第二篇)

1,163次阅读
2条评论

共计 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发表,共计1591字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(2条评论)
李硕 评论达人 LV.1
2021-11-30 14:39:57 回复

群加不进去了作者大哥

 Windows  Chrome  中国上海上海市联通
Huksy7 评论达人 LV.1
2021-12-02 23:39:10 回复

小白不会用T T

 Windows  Edge  中国上海上海市电信