lanbda_20080810 2023-04-15 09:01 采纳率: 60.9%
浏览 7

自制RC4加密连续文本乱码

从网上找了一个RC4加密的代码,刚开始还行,但是后来加密一些连续字符或数字解密后乱码。

# 密钥编排函数
def KSA(key):
    S = []        # 状态数组
    T = []        # 临时数组
    #初始化S和T
    for i in range(256):
        S.append(i)
        T.append(key[i % len(key)])
    # print(S,T)

    #用T产生S的初始置换
    j = 0
    for i in range(256):
        j = (j + S[i] + ord(T[i])) % 256
        S[i],S[j] = S[j],S[i]   #交换S[i] 和 S[j]
    # print(S,T)
    return S

#密钥流生成函数
def generateKey(S,M):
    Ks = []
    i = j = 0
    for _ in range(len(M)):
        i = (i + 1) % 26
        j = (j + S[i]) % 256
        S[i],S[j] = S[j],S[i]
        t = (S[i] + S[j]) % 256
        Ks.append(t)
    return Ks

class RC4:
    # 加密函数
    def Rc4_encode(M,key):
        C = ""
        S = KSA(key)    # 密钥编排
        Ks = generateKey(S,M)
        for i in range(len(M)):
            C += chr(ord(M[i]) ^ S[Ks[i]])
        return C
        
    # 解密函数
    def Rc4_decode(C,key):
        M = ""
        S = KSA(key)    # 密钥编排
        Ks = generateKey(S,C)
        for i in range(len(C)):
            M += chr(ord(C[i]) ^ S[Ks[i]])
        return M
    

if __name__ == "__main__":
    key = '1234321'
    m = '1222'

    C = RC4.Rc4_encode(m,key)
    print("加密后密文:" , C)

    M = RC4.Rc4_decode(C,key)
    print("解密后明文:",M)

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-15 12:16
    关注
    • 这篇博客: 【爬虫知识】爬虫常见加密解密算法中的 RC4 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 简介:英文名称:Rivest Cipher 4,也称为 ARC4 或 ARCFOUR,是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法。RC4 是有线等效加密(WEP)中采用的加密算法,也曾经是 TLS 可采用的算法之一,该算法的速度可以达到 DES 加密的 10 倍左右,且具有很高级别的非线性,虽然它在软件方面的简单性和速度非常出色,但在 RC4 中发现了多个漏洞,它特别容易受到攻击,RC4 作为一种老旧的验证和加密算法易于受到黑客攻击,现在逐渐不推荐使用了。

      参考资料:

      • RFC 7465:https://datatracker.ietf.org/doc/rfc7465/
      • RC4 维基百科:https://en.wikipedia.org/wiki/RC4
    评论

报告相同问题?

问题事件

  • 创建了问题 4月15日

悬赏问题

  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题