精易论坛

标题: 关于对进制转换与N进制的研究与探讨小白探讨大神看个乐子 [打印本页]

作者: Alan艾伦    时间: 2024-12-10 17:09
标题: 关于对进制转换与N进制的研究与探讨小白探讨大神看个乐子
本帖最后由 Alan艾伦 于 2024-12-11 00:29 编辑

      在日常的进制转换操作中,咱们一般都是采用字符与拼音来进行的哦,注意啦,是拼音而非英文,毕竟咱们易语言主打拼音嘛,开个小玩笑。不过呢,这也在很大程度上限制了进制转换所能达到的上限。我在全键盘范围内仔细搜寻后发现,算上那些因各种特殊缘由(这里的特殊缘由是基于我个人使用场景而无法使用的情况,就不深入探讨啦)不能用的字符,极限也只能凑出 90 个。

       于是我突发奇想,咱们中国汉字可有好几万个字符呢,为何不将其用于进制转换呢?这其实也可当作一种加密手段。如此一来,不但能够把冗长的 16 进制文本大幅缩减,而且众多的汉字字符足以提供丰富的加密选择。

       例如,将一串数字先转换为特定规则下的汉字组合形式,就像把数字 “12345” 按照自行设定的汉字对应规则转换为 “山河日月星”,只有知道对应规则的人才能还原。再比如,对于一段十六进制数据 “AB CD EF”,可以依据独特的汉字编码体系转换为 “春风秋雨冬雪”,这样就实现了加密与进制转换的融合,外人很难轻易解读其中含义。
        以下是一个非常简单且初步的示例代码思路,用于将简单数字基于自定义的汉字映射规则来模拟类似利用汉字做 “进制转换”(加密)及反向转换(解密)的过程,实际应用中你可以根据具体复杂需求拓展和完善。
加密(类似用汉字做特殊进制转换表示)示例代码

  
子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
数字整数型 
数字 = 到整数 (编辑框1.内容)  ' 这里可以替换为你想要转换的实际数字
编辑框2.内容 = 十进制汉字加密 (数字)
子程序名返回值类型公开备 注
十进制汉字加密文本型 
参数名类 型参考可空数组备 注
十进制数整数型
变量名类 型静态数组备 注
余数整数型 
结果文本型 
进制符表文本型 
计次整数型 
结果 = “”
进制符表 = “天地人和此为华夏圣道乾象崇巍御时序迁易辰宿列张玄理奥赜纳于幽微斯乃造化枢机坤势绵衍滋卉木葱郁原隰腴沃群有凭依而盛可谓万汇本根贤寰瀛间处膺灵明睿哲仰眺昊穹之杳渺俯睨厚载沉雄感”
判断循环首 (十进制数 > 0)
余数 = 十进制数 % 84
十进制数 = 十进制数 ÷ 84
调试输出 (余数)
结果 = 取文本中间 (进制符表, 余数 × 2 - 1, 2) + 结果
调试输出 (结果)
判断循环尾 ()
返回 (结果)


i支持库列表   支持库注释   
spec特殊功能支持库

解密(还原回原来数字)示例代码
  
[e=4].版本 2
子程序名返回值类型公开备 注
_按钮2_被单击  
变量名类 型静态数组备 注
加密汉字文本文本型 
加密汉字文本 = 编辑框2.内容
编辑框3.内容 = 到文本 (十进制汉字解密 (加密汉字文本))
子程序名返回值类型公开备 注
十进制汉字解密整数型 
参数名类 型参考可空数组备 注
六十四进制数文本型
变量名类 型静态数组备 注
数字整数型 
结果整数型 
i整数型 
进制符表文本型 
结果 = 0
数字 = 0
进制符表 = “天地人和此为华夏圣道乾象崇巍御时序迁易辰宿列张玄理奥赜纳于幽微斯乃造化枢机坤势绵衍滋卉木葱郁原隰腴沃群有凭依而盛可谓万汇本根贤寰瀛间处膺灵明睿哲仰眺昊穹之杳渺俯睨厚载沉雄感”
计次循环首 (取文本长度 (六十四进制数) ÷ 2, i)
数字 = 寻找文本 (进制符表, 取文本中间 (六十四进制数, i × 2 - 1, 2), , )
结果 = 结果 × 84 + 数字 ÷ 2 + 1
计次循环尾 ()
返回 (结果)

    在易语言中创建一个窗口,添加两个按钮(按钮1用于加密,按钮2用于解密)以及三个编辑框(编辑框1可用于输入原始数字等,编辑框2用于显示加密后的汉字,编辑框3用于显示解密还原后的数字),将上述代码分别放入对应的按钮单击事件和相应的子程序定义位置,运行程序后,点击按钮就能看到基本的效果。

           不过要注意的是,这只是一个极其简单的示意,真正用于复杂进制转换和加密用途,需要精心设计更科学合理的汉字映射规则、考虑字符编码兼容性、处理不同长度和类型数据等诸多细节问题,同时也要考虑到这种简单方式安全性其实很有限,只是一种思路探索哦。

2024年12月10日18点47分


经过对前人代码进制的查看与研究改进了我的代码更新了代码,想要多少进制就可以多少进制只要替换
  
子程序名返回值类型公开备 注
十进制汉字加密文本型 
参数名类 型参考可空数组备 注
十进制数整数型
变量名类 型静态数组备 注
余数整数型 
结果文本型 
进制符表文本型 
计次整数型 
结果 = “”
进制符表 = “天地人和此为华夏圣道乾象崇巍御时序迁易辰宿列张玄理奥赜纳于幽微斯乃造化枢机坤势绵衍滋卉木葱郁原隰腴沃群有凭依而盛可谓万汇本根贤寰瀛间处膺灵明睿哲仰眺昊穹之杳渺俯睨厚载沉雄感”  ' 更多进制就修改这里记得这里添加不重复的文本即可
判断循环首 (十进制数 > 0)
余数 = 十进制数 % 84  ' 更多进制就修改这里记得这里是文本长度/2
十进制数 = 十进制数 ÷ 84  ' 更多进制就修改这里记得这里是文本长度/2
调试输出 (余数)
结果 = 取文本中间 (进制符表, 余数 × 2 - 1, 2) + 结果  ' 因为汉字占用两个长度所以*2
调试输出 (结果)
判断循环尾 ()
返回 (结果)
子程序名返回值类型公开备 注
十进制汉字解密整数型 
参数名类 型参考可空数组备 注
六十四进制数文本型
变量名类 型静态数组备 注
数字整数型 
结果整数型 
i整数型 
进制符表文本型 
结果 = 0
数字 = 0
进制符表 = “天地人和此为华夏圣道乾象崇巍御时序迁易辰宿列张玄理奥赜纳于幽微斯乃造化枢机坤势绵衍滋卉木葱郁原隰腴沃群有凭依而盛可谓万汇本根贤寰瀛间处膺灵明睿哲仰眺昊穹之杳渺俯睨厚载沉雄感”  ' 更多进制就修改这里记得这里添加不重复的文本即可
计次循环首 (取文本长度 (六十四进制数) ÷ 2, i)  ' 因为汉字占用两个长度所以/2
数字 = 寻找文本 (进制符表, 取文本中间 (六十四进制数, i × 2 - 1, 1), , )
结果 = 结果 × 84 + 数字 ÷ 2 + 1  ' 更多进制就修改这里 结果 = 结果 × 修改这里 + 数字 ÷ 2 + 1
计次循环尾 ()
返回 (结果)


i支持库列表   支持库注释   
spec特殊功能支持库



经过这次的改进已经能实现N进制的转换  只要汉字不重复就可以实现跟多进制  当然如果易语言不支持这个汉字那个另说只能找易语言作者喝喝茶问问为什么不支持了哈哈  开个小玩笑!

当然有个很有趣的猜想就是看起来是一个平平无奇的小作文但是其实是一张美女图片 哈哈你觉得有没有意思!

测试了代码还有很多地方本人无法实现如果有相同兴趣的大佬愿意一起研究一下的可以帮忙修饰一下代码不胜感谢

找了2500个汉字想做个2500进制的结果发现行不通代码如下不知有没有大佬能帮忙修改一下

  
常量名称常量值公 开备 注
进制符表<文本长度: 5000> 

子程序名返回值类型公开备 注
十进制转2500进制汉字加密文本型 
参数名类 型参考可空数组备 注
十进制数整数型
进制符表文本型一段不重复的汉字来标识进制多少个汉字多少进制,留空默认5000进制
变量名类 型静态数组备 注
余数整数型 
结果文本型 
进制符表文本型 
计次整数型 
进制整数型 
结果 = “”
如果真 (进制符表 = “”)
进制符表 = #进制符表  ' 更多进制就修改这里记得这里添加不重复的文本即可
进制 = 取文本长度 (进制符表) ÷ 2
判断循环首 (十进制数 > 0)
余数 = 十进制数 % 进制  ' 更多进制就修改这里记得这里是文本长度/2
调试输出 (余数)
十进制数 = 十进制数 ÷ 进制  ' 更多进制就修改这里记得这里是文本长度/2
结果 = 取文本中间 (进制符表, 余数 × 2 - 1, 2) + 结果  ' 因为汉字占用两个长度所以*2
判断循环尾 ()
返回 (结果)
子程序名返回值类型公开备 注
十进制转2500进制汉字解密整数型 
参数名类 型参考可空数组备 注
二五零零进制数文本型
进制符表文本型一段不重复的汉字来标识进制多少个汉字多少进制,留空默认5000进制
变量名类 型静态数组备 注
数字整数型 
结果整数型 
i整数型 
进制整数型 
结果 = 0
数字 = 0
如果真 (进制符表 = “”)
进制符表 = #进制符表  ' 更多进制就修改这里记得这里添加不重复的文本即可
进制 = 取文本长度 (进制符表) ÷ 2
计次循环首 (取文本长度 (二五零零进制数) ÷ 2, i)  ' 因为汉字占用两个长度所以/2计次循环首 ()
数字 = 寻找文本 (进制符表, 取文本中间 (二五零零进制数, i × 2 - 1, 2), , )
结果 = 结果 × 进制 + 数字 ÷ 2 + 1  ' 更多进制就修改这里 结果 = 结果 × 修改这里 + 数字 ÷ 2 + 1
计次循环尾 ()
返回 (结果)


i支持库列表   支持库注释   
spec特殊功能支持库
上个源码吧里面有好多进制转换



屏幕截图 2024-12-11 002354.png (46.61 KB, 下载次数: 2)

屏幕截图 2024-12-11 002354.png

进制研究.e

33.21 KB, 下载次数: 2, 下载积分: 精币 -2 枚


作者: 梦幻1096    时间: 2024-12-10 17:40
你的意思就相当于替换汉字字符映射表,解密的时候在替换回来,但是汉字占用两个字节,加密可以,但是做不到容量缩减的,而且用途不大,不如主流加密算法!
作者: KD飞飞    时间: 2024-12-10 18:05
意思是需要先写密码本

天帝=吃饭
草垛=骑车
卢本伟牛逼=12345
......
诸如此类

作者: Alan艾伦    时间: 2024-12-10 19:12
KD飞飞 发表于 2024-12-10 18:05
意思是需要先写密码本

天帝=吃饭

不用谢密码本那么复杂只要声明一个常量,常量里放不重复的文字就好了你看看我的代码是不是已经可以实现加密解密且不用特意写密码本。16进制文本也能加密不是码只要转换成十进制再转换N进制
作者: Alan艾伦    时间: 2024-12-10 19:15
梦幻1096 发表于 2024-12-10 17:40
你的意思就相当于替换汉字字符映射表,解密的时候在替换回来,但是汉字占用两个字节,加密可以,但是做不到 ...

我觉得小数据加密是用不上,但是大数据加密就用的上了比如加密码一长串密文。甚至可以实现加密后是一篇平平无奇的小作文但是解密后就是新世界哈哈就是简单的猜想。哈哈
作者: 算法艺术家    时间: 2024-12-10 20:04
梦幻1096 发表于 2024-12-10 17:40
你的意思就相当于替换汉字字符映射表,解密的时候在替换回来,但是汉字占用两个字节,加密可以,但是做不到 ...

看来你是懂主流加密算法的
作者: 卡卡1111    时间: 2024-12-10 20:31
  谢谢分享,支持开源
作者: 胖子葛格    时间: 2024-12-11 09:16
感谢大神分享~!
作者: 一指温柔    时间: 2024-12-11 10:09
感谢分享,很给力!~
作者: year1970    时间: 2024-12-11 12:29
感谢分享
作者: 396384183    时间: 2024-12-12 10:36

感谢分享
感谢分享
作者: lbt1993    时间: 2024-12-12 13:35
学习一下学习一下
作者: xx1231    时间: 2024-12-12 21:55
思路不错,学习下
作者: kenan236    时间: 2024-12-15 01:24
6666666666666666666666666666




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4