本帖最后由 憨憨问号 于 2024-10-29 12:12 编辑
前言:
1.纯源码,无嵌套模块
2.灵感来源于https://125.confly.eu.org/forum.php?mod=viewthread&tid=14827786,感谢大神无私开源
3.后面在讲效果和原理解析,不想看我扯淡的直接回复拿源码
文本转任意进制加密.rar
(14.71 KB, 下载次数: 115)
效果:
原文:精易论坛真有趣
秘钥:蜂蜜
密文:蜜蜜蜜蜜蜜蜂蜂蜜蜂蜜蜜蜜蜜蜜蜂 蜜蜜蜂蜂蜜蜜蜂蜂蜂蜂蜜蜂蜂蜜蜜 蜜蜂蜂蜂蜜蜂蜜蜜蜜蜂蜜蜜蜜蜂蜜蜂 蜜蜂蜜蜂蜜蜜蜜蜂蜜蜂蜜蜜蜂蜜蜜 蜜蜜蜜蜂蜜蜜蜜蜂蜂蜂蜜蜜蜜蜜蜜 蜜蜜蜂蜂蜜蜜蜜蜂蜂蜂蜂蜜蜂蜂蜜 蜜蜂蜂蜂蜜蜜蜂蜜蜜蜂蜜蜂蜂蜂蜜蜜
原文:我是憨憨问号
秘钥:来哔哩看憨批问号玩植物大战僵尸
密文:号问玩物 号大看尸 号问哔物 号问哔物 大批玩战 问批玩来
原理:
|
进制_10到其它 | 文本型 | | |
十进制 | 长整数型 | | | | 到进制 | 整数型 | | | |
结果 = 取空白文本 (66 )_i64toa_s (十进制, 结果, 66, 到进制 )返回 (结果 )|
进制_转换 | 文本型 | | |
进制文本 | 文本型 | | | | from | 整数型 | | | | to | 整数型 | | | | 返回 (进制_10到其它 (进制_其它到10 (进制文本, from ), to )) |
进制_其它到10 | 长整数型 | | |
文本 | 文本型 | | | | 文本进制 | 整数型 | | | | 返回 (_strtoi64 (文本, 0, 文本进制 ))
这段代码用的是论坛大佬发布的帖子https://125.confly.eu.org/forum.php?mod=viewthread&tid=14827786
在此基础上我又进行了二段封装,使其能够将汉字转换为进制数
变量名 | 类 型 | 静态 | 数组 | 备 注 | un码 | 文本型 | | | 待处理十进制文本 | 文本型 | | 0 | 处理结果 | 文本型 | | | i | 整数型 | | |
un码 = 编码_Ansi到Unicode_文本型 (文本 )待处理十进制文本 = 分割文本 (un码, “&#”, ) 删除成员 (待处理十进制文本, 1, 1 ) 计次循环首 (取数组成员数 (待处理十进制文本 ), i ) 如果 (处理结果 = “”)   处理结果 = 处理结果 + 进制_10到其它 (到长整数 (待处理十进制文本 [i ]), 进制n )   处理结果 = 处理结果 + “ ” + 进制_10到其它 (到长整数 (待处理十进制文本 [i ]), 进制n )   计次循环尾 ()返回 (处理结果 )变量名 | 类 型 | 静态 | 数组 | 备 注 | 进制文本 | 文本型 | | 0 | un码 | 文本型 | | | i | 整数型 | | |
进制文本 = 分割文本 (文本, “ ”, ) 计次循环首 (取数组成员数 (进制文本 ), i ) un码 = un码 + “&#” + 到文本 (进制_其它到10 (进制文本 [i ], 进制n )) 计次循环尾 ()返回 (编码_Unicode到Ansi_文本型 (un码 ))
二段封装的原理如下:
1.利用“编码_Ansi到Unicode_文本型”命令将文本转为unicode值
例如“精易论坛”转换后变为“精易论坛”
2.对转换后的un码进行分割,以“&#”作为分隔符,分割成一个个十进制整数
3.将十进制整数分别进行进制转换后输出结果
如此一来,已经实现了简单的加密了
例如“精易论坛”加密为14进制的结果为“b8d0 9747 d070 8215”
再最后,我又进行了第三段封装,也就是将转换进制后的un码再次进行混淆
变量名 | 类 型 | 静态 | 数组 | 备 注 | 进制 | 整数型 | | | 秘钥数组原文数组 | 文本型 | | 0 | 秘钥数组 | 文本型 | | 36 | i | 整数型 | | |
进制 = 取文本长度 (秘钥 ) ÷ 2 调试输出 (到文本 (进制 ) + “进制加密”) 如果真 (取文本长度 (原文 ) < 2 ) 返回 (“原文不可为空!”) 如果真 (取文本长度 (秘钥 ) < 2 ) 返回 (“秘钥不可为空!”) 如果真 (_只取汉字 (秘钥 ) ≠ 秘钥 ) 返回 (“秘钥必须是纯汉字”) 如果真 (进制 > 36 或 进制 < 2 ) 返回 (“秘钥不能小于两位或是大于36位”) 如果真 (文本_去重复文本 (秘钥, ) ≠ 秘钥 ) 返回 (“秘钥的每个文本都不能重复”)文本_逐字分割_汇编 (秘钥, 秘钥数组)
计次循环首 (36 - 取数组成员数 (秘钥数组 ), i ) 加入成员 (秘钥数组, “”) 计次循环尾 ()原文 = wh_文本到n进制 (原文, 进制 ) 原文 = 到小写 (原文 ) 原文 = 子文本替换 (原文, “0”, 秘钥数组 [1 ], , , 真)原文 = 子文本替换 (原文, “1”, 秘钥数组 [2 ], , , 真)原文 = 子文本替换 (原文, “2”, 秘钥数组 [3 ], , , 真)原文 = 子文本替换 (原文, “3”, 秘钥数组 [4 ], , , 真)原文 = 子文本替换 (原文, “4”, 秘钥数组 [5 ], , , 真)原文 = 子文本替换 (原文, “5”, 秘钥数组 [6 ], , , 真)原文 = 子文本替换 (原文, “6”, 秘钥数组 [7 ], , , 真)原文 = 子文本替换 (原文, “7”, 秘钥数组 [8 ], , , 真)原文 = 子文本替换 (原文, “8”, 秘钥数组 [9 ], , , 真)原文 = 子文本替换 (原文, “9”, 秘钥数组 [10 ], , , 真)原文 = 子文本替换 (原文, “a”, 秘钥数组 [11 ], , , 真)原文 = 子文本替换 (原文, “b”, 秘钥数组 [12 ], , , 真)原文 = 子文本替换 (原文, “c”, 秘钥数组 [13 ], , , 真)原文 = 子文本替换 (原文, “d”, 秘钥数组 [14 ], , , 真)原文 = 子文本替换 (原文, “e”, 秘钥数组 [15 ], , , 真)原文 = 子文本替换 (原文, “f”, 秘钥数组 [16 ], , , 真)原文 = 子文本替换 (原文, “g”, 秘钥数组 [17 ], , , 真)原文 = 子文本替换 (原文, “h”, 秘钥数组 [18 ], , , 真)原文 = 子文本替换 (原文, “i”, 秘钥数组 [19 ], , , 真)原文 = 子文本替换 (原文, “j”, 秘钥数组 [20 ], , , 真)原文 = 子文本替换 (原文, “k”, 秘钥数组 [21 ], , , 真)原文 = 子文本替换 (原文, “l”, 秘钥数组 [22 ], , , 真)原文 = 子文本替换 (原文, “m”, 秘钥数组 [23 ], , , 真)原文 = 子文本替换 (原文, “n”, 秘钥数组 [24 ], , , 真)原文 = 子文本替换 (原文, “o”, 秘钥数组 [25 ], , , 真)原文 = 子文本替换 (原文, “p”, 秘钥数组 [26 ], , , 真)原文 = 子文本替换 (原文, “q”, 秘钥数组 [27 ], , , 真)原文 = 子文本替换 (原文, “r”, 秘钥数组 [28 ], , , 真)原文 = 子文本替换 (原文, “s”, 秘钥数组 [29 ], , , 真)原文 = 子文本替换 (原文, “t”, 秘钥数组 [30 ], , , 真)原文 = 子文本替换 (原文, “u”, 秘钥数组 [31 ], , , 真)原文 = 子文本替换 (原文, “v”, 秘钥数组 [32 ], , , 真)原文 = 子文本替换 (原文, “w”, 秘钥数组 [33 ], , , 真)原文 = 子文本替换 (原文, “x”, 秘钥数组 [34 ], , , 真)原文 = 子文本替换 (原文, “y”, 秘钥数组 [35 ], , , 真)原文 = 子文本替换 (原文, “z”, 秘钥数组 [36 ], , , 真) 返回 (原文 )变量名 | 类 型 | 静态 | 数组 | 备 注 | 进制 | 整数型 | | | 秘钥数组 | 文本型 | | 36 | i | 整数型 | | |
进制 = 取文本长度 (秘钥 ) ÷ 2 调试输出 (到文本 (进制 ) + “进制加密”) 如果真 (取文本长度 (密文 ) < 2 ) 返回 (“密文不可为空!”) 如果真 (取文本长度 (秘钥 ) < 2 ) 返回 (“秘钥不可为空!”) 如果真 (_只取汉字 (秘钥 ) ≠ 秘钥 ) 返回 (“秘钥必须是纯汉字”) 如果真 (进制 > 36 或 进制 < 2 ) 返回 (“秘钥不能小于两位或是大于36位!”) 如果真 (文本_去重复文本 (秘钥, ) ≠ 秘钥 ) 返回 (“秘钥的每个文本都不能重复”)文本_逐字分割_汇编 (秘钥, 秘钥数组)
计次循环首 (36 - 取数组成员数 (秘钥数组 ), i ) 加入成员 (秘钥数组, “”) 计次循环尾 () 密文 = 子文本替换 (密文, 秘钥数组 [1 ], “0”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [2 ], “1”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [3 ], “2”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [4 ], “3”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [5 ], “4”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [6 ], “5”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [7 ], “6”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [8 ], “7”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [9 ], “8”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [10 ], “9”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [11 ], “a”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [12 ], “b”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [13 ], “c”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [14 ], “d”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [15 ], “e”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [16 ], “f”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [17 ], “g”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [18 ], “h”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [19 ], “i”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [20 ], “j”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [21 ], “k”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [22 ], “l”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [23 ], “m”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [24 ], “n”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [25 ], “o”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [26 ], “p”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [27 ], “q”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [28 ], “r”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [29 ], “s”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [30 ], “t”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [31 ], “u”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [32 ], “v”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [33 ], “w”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [34 ], “x”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [35 ], “y”, , , 真)密文 = 子文本替换 (密文, 秘钥数组 [36 ], “z”, , , 真) 密文 = wh_n进制到文本 (密文, 进制 ) 返回 (密文 )
第三段封装的原理:
1.得到原文和秘钥后,先判断秘钥的位数,决定加密进制,例如秘钥为“你好”则用二进制加密,秘钥为“鸡你太美”则用四进制加密
2.逐字分割秘钥文本,将其用数组储存起来,若秘钥数组不足36个成员,则用“”(空文本)补齐36
3.将原文先用“第二段封装”的代码转换为进制数
4.再将“0”“1”“2”....“x”“y”“z”这36个字符分别用秘钥数组[1] 秘钥数组[2] 秘钥数组[3]...秘钥数组[35] 秘钥数组[36]进行子文本替换。例如秘钥为“你好”时,则会把0替换为你,1替换为好,而2 - z则会被空文本替换。解密时过程与此正好相反
如此一来完成整个加密过程
支持2到36所有进制,密文支持标点,秘钥仅支持汉字,后续可能会优化支持标点符号
制作初衷:
最早我在论坛发过“把文本加密成傻逼二字”的帖子,不知道还有没有
最近我又在b站看到有人艾特我看这个视频:https://www.bilibili.com/video/BV1wTtWeeE9N
以及这个哈基米加密:https://www.bilibili.com/video/BV11mxeeFEDu
但是他们的缺点都很明显,那就是二字加密就只能是二字加密,三字加密就只能是三字加密
所以我突发奇想,能不能做一个自动判断秘钥位数来决定是几进制加密的东西?
所以这个模块就应运而生了(我才不会告诉你其实就是上午拉肚子没去上课在家显得放屁所以写了这么一坨东西,上面鬼扯那么多其实都是借口)
模块和源码一起打包进去了,编译即用
回复本帖祝您新的一年大富大贵
|