请简介流加密的基本原理
答:流加密(英语:Stream cipher),又译为流加密、数据流加密,是一种对称加密算法,加密和解密双方使用相同伪随机加密数据流(pseudo-random stream)作为密钥,明文数据每次与密钥数据流顺次对应加密,得到密文数据流。
RC4 算法是一种序列密码体制或称流密码体制,其加密密钥和解密密钥相同 RC4 的密钥长度可变,但为了确保哪去安全强度,目前 RC4 至少使用 128 位的密钥。用 1~256 个字节(8~2048 位)的可变长度密钥初始化一个 256 个字节的状态向量 S,S 的元素记为 S[0],S[1],…,S[255],从始至终置换后的 S 包含从 0 到 255 的所有 8 位数。对于加密和解密,字节 K 是从 S 的 255 个元素中按一种系统化的方式选出的一个元素生成的。每生成一个 K 的值,S 中的元素个体就被重新置换一次。
实验环境:Python 编程环境/Java 编程环境
计算机科学技术学院实验报告 实验课 程 网络信息安 全 专业 网络工程 班级 实验日期 4·27 同组实验者 无 指导教师 实验名 称 实验 3 基于 RC4 的流加密实验 实验成绩 实验环 境 Python/Java 实验目 的 1、掌握流加密的基本思想 2、掌握 RC4 算法实现流加密 实验原 理 请简介流加密的基本原理 答:流加密(英语:Stream cipher),又译为流加密、数据流加密,是一种对称加密算 法,加密和解密双方使用相同伪随机加密数据流(pseudo-random stream)作为密钥,明文 数据每次与密钥数据流顺次对应加密,得到密文数据流。 RC4 算法是一种序列密码体制或称流密码体制,其加密密钥和解密密钥相同 RC4 的密钥长度可 变,但为了确保哪去安全强度,目前 RC4 至少使用 128 位的密钥。用 1~256 个字节(8~2048 位) 的可变长度密钥初始化一个 256 个字节的状态向量 S,S 的元素记为 S[0],S[1],…,S[255],从始至终 置换后的 S 包含从 0 到 255 的所有 8 位数。对于加密和解密,字节 K 是从 S 的 255 个元素中按一 种系统化的方式选出的一个元素生成的。每生成一个 K 的值,S 中的元素个体就被重新置换一次。 实验环 境 实验环境:Python 编程环境/Java 编程环境 实验内 容 1、 请用 Python 或 Java 编程实现基于 RC4 算法的流加密/解密工具,工具可以是命 令行的,也可以是 Web 页面的,要求如下: (1) 要求能够对一个数据文件进行加密 (2) 假设是基于 8 位的流加密 (3) 不可以直接调用 Python/Java 密码库的流加密函数。 import random # 初始化向量 S def init_S(): global S for i in range(8): S.append(i) # 初始化向量 T def init_T(): global Key,T keylen = random.randint(1,8) for i in range(keylen): index = random.randint(0,61) #获取随机的临时密钥 Key Key.append(WordList[index]) for i in range(8): tmp = Key[i % keylen] #初始化向量 T T.append(tmp) # 初始置换 S[i] def swap_S(): global S,T j = 0 for i in range(8): j = (j+S[i]+ord(T[i])) % 8 tmp = S[i] S[i] = S[j] S[j] = tmp # 密钥流生成 def Get_KeyStream(): global S,text,KeyStream txtlen = len(text) j,t = 0,0 for i in range(txtlen): i = i % 8 j = (j+S[i]) % 8 tmp = S[i] S[i] = S[j] S[j] = tmp t = (S[i] + S[j]) % 8 KeyStream.append(S[t]) # 加密 & 解密 def Get_code(): global PlainText,CryptoText,KeyStream,text for i in range(len(text)): CryptoText += chr(ord(text[i]) ^ KeyStream[i]) # 加密 for i in range(len(text)): PlainText += chr(ord(CryptoText[i]) ^ KeyStream[i]) # 解密 print('''[+]=================开始加密==================''') print("[+]你的密文---------->",CryptoText) print('''[+]=================开始解密==================''') print("[+]你的明文---------->",PlainText) if __name__ == '__main__' : T,S,Key = [],[],[] PlainText,CryptoText,KeyStream = '','',[] WordList = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789zZ" # 用 于生成临时密钥 Key text = input("[+]please input you Plaintext here : ") init_S() init_T() swap_S() Get_KeyStream() Get_code() 2、 截图显示你的所有代码(分函数来截图),并做简要的解释 实验总 结 只做到了对自行输入的内容进行加密,还不能实现通过路径选择文件对文件 进行加密。