实现rc4库

非常简洁,看代码吧

import base64
import hashlib
import os
from io import BytesIOclass RC4(object):def __init__(self, key=None):self.key = hashlib.md5(key.encode("utf-8")).hexdigest()def encode(self, in_stream, out_stream):sbox = self.sbox()while 1:chunk = in_stream.read(8)if not chunk:breakout_chuck = bytearray()for bt in chunk:out_chuck.append(bt ^ next(sbox))out_stream.write(bytes(out_chuck))def sbox(self):keylength = len(self.key)s = list(range(256))  # init S boxj = 0for i in range(255):j = (j + s[i] + ord(self.key[i % keylength])) % 256s[i], s[j] = s[j], s[i]i = 0j = 0while 1:i = (i + 1) % 256j = (j + s[i]) % 256s[i], s[j] = s[j], s[i]yield s[(s[i] + s[j]) % 256]def encrypt(in_stream: BytesIO, out_stream: BytesIO, pwd: str):rc4_cryptor = RC4(pwd)rc4_cryptor.encode(in_stream, out_stream)# 下面都是锦上添花的东西,和rc4没啥关系
def encrypt_str(data: str, pwd: str):in_stream = BytesIO()out_stream = BytesIO()data_bytes = data.encode("utf-8")# 魔改 引入随机IV打乱原文,不喜欢的话就删之吧。:)iv = os.urandom(1)[0]tp_v = ivdata_xor_iv = bytearray()for bt in data_bytes:data_xor_iv.append(bt ^ tp_v)tp_v = bt ^ tp_vin_stream.write(data_xor_iv)in_stream.seek(0)encrypt(in_stream, out_stream, pwd)enc_bytes = bytes([iv]) + out_stream.getvalue()b64_str = base64.urlsafe_b64encode(enc_bytes)return b64_str.decode("utf-8")def decrypt_str(data: str, pwd: str):data_bytes = base64.urlsafe_b64decode(data)in_stream = BytesIO()out_stream = BytesIO()iv = data_bytes[:1][0]in_stream.write(data_bytes[1:])in_stream.seek(0)encrypt(in_stream, out_stream, pwd)dec_bytes = out_stream.getvalue()data_xor_iv = bytearray()for bt in dec_bytes:data_xor_iv.append(bt ^ iv)iv = btreturn data_xor_iv.decode('utf-8')if __name__ == "__main__":test_byte_data = "hello world 世界你好"ret = encrypt_str(test_byte_data, 'yzh')print(ret)ret = decrypt_str(ret, 'yzh')print(ret)assert test_byte_data == retret = encrypt_str("1#1500000000", 'yzh')print(ret, len(ret))ret = encrypt_str("111111#1500000000", 'yzh')print(ret, len(ret))ret = encrypt_str("99999999#1500000000", 'yzh')print(ret, len(ret))

python3 实现rc4算法相关推荐

  1. python3 - RC4 算法

    python3 - RC4 算法 max.bai 2019.07 工作中遇到的rc4 算法,记录一下 RC4,加密和解密是一样的再加密一次就等于解密了 代码实现: # coding: utf-8# i ...

  2. Python - RC4 算法

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/max229max/article/details/87607302 Python - RC4 算法 ...

  3. RC4算法及其实践(Hello Password)

    Hello Password 一个简单的安全密码管理工具. Why? 因为我无法信任网上的密码管理软件.另外,加密数据离开对应的密码管理软件无法解析,这个问题困扰着我. 所以,不如自己写一个简简单单的 ...

  4. Java实现凯撒密码、维吉尼亚密码、双换位密码、RC4算法加密

    文章目录 前言 一.凯撒密码 二.维吉尼亚密码 三.双换位密码 四.RC4算法加密 前言 本博文为信息安全与支付课程的课程作业. 一.凯撒密码 文件有:Caesar.java.输入文件input1.t ...

  5. c# rc4算法,加密解密类

    rc4算法,原理,以密匙生成256位的密匙流,然后以车轮式滚过源数据异或加密. 1 /* 2 * 由SharpDevelop创建. 3 * 用户: YISH 4 * 日期: 04/04/2015 5 ...

  6. 吉林大学计算机初剑锋,RC4算法的密码分析与改进.pdf

    第50卷 第3期 吉林 大 学 学 报 (理 学 版 ) Vo1.50 No.3 2012年 5月 JournalofJilinUniversity(ScienceEdition) May 2012 ...

  7. RC4算法python编程实现

    RC4于1987年提出,和DES算法一样.是一种对称加密算法,也就是说使用的密钥为单钥(或称为私钥). 但不同于DES的是.RC4不是对明文进行分组处理,而是字节流的方式依次加密明文中的每个字节.解密 ...

  8. RC4算法c/c++语言实现

    一.RC4算法 参考RC4加密算法的过程 代入例子计算 二.c语言实现 #include <stdio.h> #include <string.h> unsigned char ...

  9. RC4算法对文件进行加密解密

    RC4算法对文件进行加密解密 在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变.它加解密使用相同的密钥,因此也属于对称加密算法.RC4是有线等效加密(WEP ...

最新文章

  1. python 操作word页眉表格_python批量设置多个Excel文件页眉页脚的脚本
  2. Spark源码阅读02-Spark核心原理之容错及HA(高可用)
  3. 解决IDEA GIT密码输入错误后,报Authentication failed ... 不再弹出输入框,提交更新失败
  4. 艰难的选择_处理艰难对话的6种方法:分享如何衡量成功
  5. mysql 自定义函数 事务_MySQL存储过程、触发器、自定义函数、事务
  6. IntelliJ Idea 常用快捷键 超实用!
  7. 普通人能用华为P30拍出银河么?这是我们在北京实拍的结果
  8. [Lintcode]118. Distinct Subsequences/[Leetcode]115. Distinct Subsequences
  9. [转]体验:VC++ .NET 2003 –安装和使用STLport 4.5.3 和LokiPort
  10. NOIP模拟题——LGTB与序列
  11. 大气压随温度变化表_空气密度随温度的变化
  12. python爬虫练习2:取道指成分股数据
  13. 51单片机基础知识(重点)
  14. GPU Pro 7——实时体积云(翻译,附Unity工程)
  15. android 获取经纬度的三种方法,Android中如何获取经纬度
  16. VM虚拟机安装及安装Windows系统
  17. iPhone6和iPhone6 Plus和iPhone5s屏幕尺寸,分辨率,密度 对比
  18. 教你自己如何在Windows10系统创建虚拟专用网络
  19. 前端UI框架ligerui表格汇总功能无法计算全部数据的合计的解决方法
  20. 【RPA开发】Beautiful Soup 使用详解

热门文章

  1. 颐和园游记(来了可别错过)
  2. 10024---常用Impex
  3. IC_EDA_ALL虚拟机(丰富版):questasim、vivado、vcs、verdi、dc、pt、spyglass、icc2、synplify、INCISIVE、IC617、MMSIM、工艺库
  4. MFC对话框程序OnClose()和 OnDestroy()
  5. 2021年高考成绩查询安徽准考证,2021年安徽省高考准考证打印入口
  6. Mysql驱动下载和安装
  7. 欢聚时代Q2季报图解:净亏1.369亿 因被投资公允价值变动
  8. docker 镜像源大全
  9. 利用mklink符号链接给C盘瘦身
  10. 录音转换文字软件哪个好用?推荐这四款软件给你