【小玩意】锟斤拷语加密器

诗曰:“手持两把锟斤拷,口中疾呼烫烫烫。脚踏千朵屯屯屯,笑看万物锘锘锘。”(狗头)

灵感

前段时间在宿舍楼下刷脸的时候,突然蹦出了一堆乱码。

信息肯定要遮盖一点的奥
(保护一下个人信息)
我就寻思,学校这个垃圾系统这是多少年头了,竟有4大乱码之一的“锟斤拷语”。闲来无事,上网查了下原理,准备做一个小加密器。

这个乱码咋回事

Unicode是一直在更新的,在这个过程中,肯定有一些比较新的字符他是无法表示的。或者即使Unicode发布了新版纳入了某个文字,但是很多软件系统并未升级也会有这样的问题。
就像生活中一些手机厂商新出的那些emoji表情,在自己的手机上可以正常显示,发到其他品牌的手机上可能就无法显示。这其实也是字符集不支持导致的。
发生以上情况时,无法显示的时候也需要有一个字符来表示的,在Unicode中,这个字符就是 ,他也是Unicode中定义的一个特殊字符。也就是"0xFFFD REPLACEMENT CHARACTER",所有无法表示的字符都会通过这个字符来表示。
我们上网的时候不用去关心网站采用了什么编码格式,但是页面中不时出现的乱码还是会让我们头疼。在这点上,Firefox的用户更是深有体会,用Firefox浏览网页看到乱码的机会要比Internet Explorer多得多。 乱码主要与字符编码系统有关。例如一个网页中常出现的乱码“锟斤拷”,它就是新老编码系统转换中出现的。
锟斤拷涉及unicode的字符集转换问题,Unicode和老编码体系的转化过程中,肯定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLACEMENT CHARACTER。U+FFFD的UTF-8编码是0xEFBFBD,如果重复多次形成:EFBFBDEFBFBDEFBFBD 。
在GBK/CP936/GB2312/GB18030的环境中显示的话,一个汉字2个字节,最终的结果就是:锟斤拷——锟(0xEFBF),斤(0xBDEF),拷(0xBFBD)。

来源:百度百科(我相信你一定查过了吧)

代码实现

import os

a = input('请选择你的功能(1、加密 2、解密):')

if a == "1":
    s = input('请输入你要加密的话:')
    utf = s.encode('utf')
    gbk = s.encode('utf').decode('gbk', errors='ignore')
    if len(s)%2 == 1:
        gbk = gbk + "�"
    print(gbk)
    os.system("pause")

if a == "2":
    s = input('请输入你要解密的话:')
    gbk = s.encode('gbk')
    utf = s.encode('gbk').decode('utf-8', errors='ignore')
    print(utf)
    os.system("pause")

没啥含金量,就是编码来回转换,说个我碰见的问题吧:
根据上面的原理,GBK两个字节一个汉字,Unicode三个字节一个汉字,所以说加密的每个汉字转换成一个半密文。
到这问题就来了,正常结尾的半个字符我们直接变成“�”就好了,但是多出来的编译器不认识,就会报错。
这时候我们在decode那行里加上error = ’ignore‘

    gbk = s.encode('utf').decode('gbk', errors='ignore')
    utf = s.encode('gbk').decode('utf-8', errors='ignore')

没错,我们无视它,然后手动把那个“�”补上。

接下来是解密部分的ignore到底有没有必要呢?
如果是完整的锟斤拷句子是没有必要加的,但是只要系统足够垃圾,“�”占位符有时候不会显示出来,为了防止可能出现的问题,我还是加上了。

结语

一时兴起整的小活,咱也在一直学习着呐,如果各位大佬有更好的想法,欢迎在评论区留言或者私信我呀。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值