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

上回说到

请先看第一回: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)
        }

结语

官方更新是好事,但是也请一次更新到位,用最好的技术来应对作弊,或者能给学生们一份题库用来背,也能达到学习的目的。

希望世上再无形式主义!

版权声明:
作者:zjh4473
链接:https://blog.zixutech.cn/?p=670
来源:紫旭Blog
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>