Python实现希尔加密/解密

这篇具有很好参考价值的文章主要介绍了Python实现希尔加密/解密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

希尔加密的原理就不多讲了,直接上代码。

定义一个函数:def fun(s, mod1, mod2, key)

s:要加密/解密的字符串

mod1:加密或解密

mod2:A=0或A=1,目前网络上的希尔加密都不是统一的,两种模式得出的结果是不一样的。

key:密钥,转换为矩阵后必须为方阵且可逆

要有传入的参数,key的长度为平方数,否则return

#边界条件    
    if not s:
        return "请输入密文"
    if not key:
        return "请输入密钥"
    l = int(len(key) ** 0.5)
    if l ** 2 != len(key):
        return "请输入有效密钥"
#统一转成小写字母,便于将字符串转成矩阵
s = s.lower()
key = key.lower()
#确定矩阵的长和宽
if len(s) % l == 0:
    s_w = len(s) // l
else:
    s_w = len(s) // l + 1
s_h = l
#初始化矩阵列表
ss = [[0 for _ in range(s_w)] for _ in range(s_h)]
keys = [[0 for _ in range(l)] for _ in range(l)]

对于上述的处理:不论加密还是解密,都是密钥x密文,或密钥的逆x密文,所以密文的高为密钥的边长,宽为:刚好构成一个矩阵,宽为总长度//l,不够则宽为总长度//l + 1。

下面对A=0和A=1分别处理s和key

#注意,矩阵是按列插入字母,如abcd,放到矩阵里是
#ac
#bd
#这里理解就行,不一定像我这样写    
    if mod_2 == "0":
        for i in range(len(s)):
            x = i // l
            y = i % l
            ss[y][x] += (ord(s[i]) - 97)
        for i in range(len(key)):
            x = i // l
            y = i % l
            keys[y][x] += (ord(key[i]) - 97)
    elif mod_2 == "1":
        for i in range(len(s)):
            x = i // l
            y = i % l
            ss[y][x] += (ord(s[i]) - 96)
        for i in range(len(key)):
            x = i // l
            y = i % l
            keys[y][x] += (ord(key[i]) - 96)
    else:
        pass

用numpy处理刚刚的列表,让他们可以进行乘法运算。

ss = np.array(ss)
keys = np.array(keys)

对于密钥不可逆,直接return,如果为解密,则让他逆

    if mod_1 == "d":
        try:
            keys = np.linalg.inv(keys)
        except Exception:
            return "密钥不可逆QAQ"

结果为

res = np.matmul(keys, ss)

最后将结果转为字符串

注意:

将矩阵的结果先模26,否则可能得不出正确结果

​
    for i in range(s_w):
        for j in range(l):
            if mod_2 == "0":
                it += chr((int(res[j][i]) % 26) + 97)
            else:
                it += chr((int(res[j][i])-1 % 26) + 97)

​

下面是完整代码

​
# 希尔加密/解密
def hill_ed(s, mod_1, mod_2, key):
    if not s:
        return "请输入密文"
    if not key:
        return "请输入密钥"
    l = int(len(key) ** 0.5)
    if l ** 2 != len(key):
        return "请输入有效密钥"
    s = s.lower()
    key = key.lower()
    if len(s) % l == 0:
        s_w = len(s) // l
    else:
        s_w = len(s) // l + 1
    s_h = l
    ss = [[0 for _ in range(s_w)] for _ in range(s_h)]
    keys = [[0 for _ in range(l)] for _ in range(l)]
    if mod_2 == "0":
        for i in range(len(s)):
            x = i // l
            y = i % l
            ss[y][x] += (ord(s[i]) - 97)
        for i in range(len(key)):
            x = i // l
            y = i % l
            keys[y][x] += (ord(key[i]) - 97)
    elif mod_2 == "1":
        for i in range(len(s)):
            x = i // l
            y = i % l
            ss[y][x] += (ord(s[i]) - 96)
        for i in range(len(key)):
            x = i // l
            y = i % l
            keys[y][x] += (ord(key[i]) - 96)
    else:
        pass
    ss = np.array(ss)
    keys = np.array(keys)
    if mod_1 == "d":
        try:
            keys = np.linalg.inv(keys)
        except Exception:
            return "密钥不可逆QAQ"
    res = np.matmul(keys, ss)
    it = ""
    for i in range(s_w):
        for j in range(l):
            if mod_2 == "0":
                it += chr((int(res[j][i]) % 26) + 97)
            else:
                it += chr((int(res[j][i])-1 % 26) + 97)
    return it

​

该工具已收录于https://www.awwwtaaa.net,点击右上角工具即可进入。文章来源地址https://www.toymoban.com/news/detail-418254.html

到了这里,关于Python实现希尔加密/解密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于怎么使用python实现 3DES 加密/解密

    3DES (Triple DES) 是一种对称加密算法,其特点是使用三次密钥加密来提高安全性。 3DES的原理是:对明文进行三次加密,每次加密的密钥不同。加密时,首先使用第一个密钥对明文进行加密,然后使用第二个密钥对加密后的数据进行解密,最后再使用第三个密钥对解密后的数据

    2024年02月15日
    浏览(28)
  • Python实现对文件或文件夹的加密/解密

      这个代码实现了对文件夹内指定类型文件的加密和解密操作,使用了base64库对文件进行加密和解密,使用os模块进行遍历目录,判断文件类型,并进行加密和解密操作,最后实现了文件删除和写入操作 代码实例:

    2024年02月13日
    浏览(39)
  • 使用Python突破某网游游戏JS加密限制,进行逆向解密,实现自动登录

    兄弟们天天看基础看腻了吧 今天来分享一下如何使用Python突破某网游游戏JS加密限制,进行逆向解密,实现自动登录。 目标:某 7 网游登录 主页:aHR0cHM6Ly93d3cuMzcuY29tLw== 接口:aHR0cHM6Ly9teS4zNy5jb20vYXBpL2xvZ2luLnBocA== 逆向参数:Query String Parameters: password: SlVEOThrcjgzNDNjaUYxOTQzNDM0eVM

    2023年04月13日
    浏览(54)
  • RSA加密、解密、签名、验签的原理及方法

    一、RSA加密简介 RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大

    2024年02月05日
    浏览(42)
  • CART算法解密:从原理到Python实现

    本文深入探讨了CART(分类与回归树)算法的核心原理、实现方法以及应用场景。文章首先介绍了决策树的基础知识,然后详细解析了CART算法的工作机制,包括特征选择和树的构建。接着,通过Python和PyTorch的实例代码展示了CART算法在实际问题中的应用。最后,文章评价了该算

    2024年02月05日
    浏览(40)
  • Python RSA加密解密

    一、RSA加密算法 RSA加密算法是一种非对称加密算法,加密的秘钥是由公钥和私钥两部分组成秘钥对,公钥用来加密消息,私钥用来解密消息,公钥是公开的,给对方进行加密,私钥则是用户自己保留,用来对加密的数据进行解密。 公钥pem文件格式:以-----BEGIN PUBLIC KEY-----标记

    2024年02月10日
    浏览(36)
  • 【Python】AES 128加密和解密

    AES加密标准又称为高级加密标准Rijndael加密法,是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。AES的基本要求是,采用对称分组密码体制,密钥长度可以为128、192或256位,分组长度128位,算法应易在各种硬件和软件上实现。1998年NIST开始AES第一轮分析、测试和征

    2024年02月13日
    浏览(39)
  • Python学习笔记——AES 加密/解密

    AES,高级加密标准。目前比较流行的对称加密算法。是一种对称加密算法,即加密和解密都用相同的密钥。 AES只是个基本算法,实现AES有几种模式,主要有ECB、CBC、CFB等几种模式。CBC模式中还有一个偏移量参数IV。 AES加密有AES-128、AES-192和AES-256三种,分别对应三种密钥长

    2023年04月15日
    浏览(33)
  • AES对称加密实战——前端js加密后端python解密

    高级加密标准(AES, Advanced Encryption Standard),是一种最常见的对称加密算法 。其加密流程如下图所示,发送方通过密钥对明文加密后进行网络传输,接收方用同样的密钥将密文解密。在前后端通讯场景中,可利用AES算法对用户密码进行加密后传输,防止被抓包而造成密码泄露。

    2024年02月04日
    浏览(40)
  • java和js实现前端加密后端解密,后端加密前端解密(Base64)

    目录 1.前端加密后端解密 2.后端加密前端解密 在前端和后端数据传输时,常常涉及到隐私数据的传输(例如用户名和密码),这时,我们就需要对隐私数据进行加密解密 1.前端加密后端解密         1.1 前端jquery实现         1.2后端 2.后端加密前端解密         2.1后端加密

    2024年02月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包