python3 实现rc4算法
实现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算法相关推荐
- python3 - RC4 算法
python3 - RC4 算法 max.bai 2019.07 工作中遇到的rc4 算法,记录一下 RC4,加密和解密是一样的再加密一次就等于解密了 代码实现: # coding: utf-8# i ...
- Python - RC4 算法
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/max229max/article/details/87607302 Python - RC4 算法 ...
- RC4算法及其实践(Hello Password)
Hello Password 一个简单的安全密码管理工具. Why? 因为我无法信任网上的密码管理软件.另外,加密数据离开对应的密码管理软件无法解析,这个问题困扰着我. 所以,不如自己写一个简简单单的 ...
- Java实现凯撒密码、维吉尼亚密码、双换位密码、RC4算法加密
文章目录 前言 一.凯撒密码 二.维吉尼亚密码 三.双换位密码 四.RC4算法加密 前言 本博文为信息安全与支付课程的课程作业. 一.凯撒密码 文件有:Caesar.java.输入文件input1.t ...
- c# rc4算法,加密解密类
rc4算法,原理,以密匙生成256位的密匙流,然后以车轮式滚过源数据异或加密. 1 /* 2 * 由SharpDevelop创建. 3 * 用户: YISH 4 * 日期: 04/04/2015 5 ...
- 吉林大学计算机初剑锋,RC4算法的密码分析与改进.pdf
第50卷 第3期 吉林 大 学 学 报 (理 学 版 ) Vo1.50 No.3 2012年 5月 JournalofJilinUniversity(ScienceEdition) May 2012 ...
- RC4算法python编程实现
RC4于1987年提出,和DES算法一样.是一种对称加密算法,也就是说使用的密钥为单钥(或称为私钥). 但不同于DES的是.RC4不是对明文进行分组处理,而是字节流的方式依次加密明文中的每个字节.解密 ...
- RC4算法c/c++语言实现
一.RC4算法 参考RC4加密算法的过程 代入例子计算 二.c语言实现 #include <stdio.h> #include <string.h> unsigned char ...
- RC4算法对文件进行加密解密
RC4算法对文件进行加密解密 在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变.它加解密使用相同的密钥,因此也属于对称加密算法.RC4是有线等效加密(WEP ...
最新文章
- 使用OpenRowSet操作Excel Excel导入数据库
- three.js 贴图只显示颜色_C4D作品“花里胡哨”?我怀疑你贴图方式有问题……
- Hinton一作新论文:如何在神经网络中表示“部分-整体层次结构”?
- Class对象和反射
- 作为开发人员,你都听产品经理的,做的累不累?
- hdfs读写流程_一文读懂HDFS分布式存储框架分析
- 精通ASP.NET MVC ——URL和Ajax辅助器方法
- java编程思想第四版第十八章总结
- MESI protocol digram
- GPRS远程开关 2 AIR202模块
- Python爬虫爬取豆瓣高分电影附源码(详细适合新手)
- 微信提现显示服务器异常,微信零钱提现为什么显示提示交易异常 解决办法是什么...
- 【论文笔记】视频物体检测(VID)系列 FGFA:Flow-Guided Feature Aggregation for Video Object Detection
- 中国数据量占全球27.8%!安防能否借机“回血”?
- FILTER的使用与过滤器实现session登录案例
- 2021赤峰二中高考成绩查询,2021年赤峰高考状元名单公布,赤峰高考状元学校资料及最高分...
- 学生成绩计算的c语言,学生成绩标准管理系统C语言.doc
- IntelliJ Idea --- 翻译插件Translation
- Argo workflow 入门
- bugku-PWN-瑞士军刀解析过程