流密码与RC4算法

流密码与RC4算法
流密码与RC4算法

收稿日期:2005-03-01

作者简介:宋维平(1960-),男,吉林省长春市人,现为吉林建筑工程学院网络信息中心副教授,硕士研究生.

2005年5月

吉林师范大学学报(自然科学版)

№.2第2期

Journal of Jilin Normal University (Natural Science Edition )May.2005

流密码与RC4算法

宋维平

(吉林建筑工程学院网络信息中心,吉林长春130021)

摘 要:本文讨论一种可能被广泛推广的对称流密码.首先介绍流密码的整体结构,设计流密码需要考虑的主

要因素,然后探讨了RC4算法.

关键词:对称密码;流密码;加密;解密;算法中图分类号:TP309.7 文献标识码:A 文章编号:1000-1840-(2005)02-0071-02

RC4是一个可变密钥长度、面向字节操作的流密码.该算法以随机置换为基础.每输出一字节的结果仅需要8到16条机器操作指令.RC4可能是应用最广泛的流密码.它被用于SSL/TL S (安全套接字协议/传输层安全协议)标准,该标准是为网络浏览器和服务器间通信而制定的.它也应用于作为IEEE802.11无线局域网标准一部分的WEP 协议.

1 流密码的结构

一个典型的流密码每次加密一个字节的明文,

当然流密码也可被设计为每次操作一比特或者大于

一个字节的单元.流密码的结构是,密钥输人到一个

伪随机数(比特)发生器,该伪随机数发生器产生一

串随机的8比特数.简单地说,一个伪随机流就是在

不知道输人密钥的情况下不可预知的流.发生器的

输出称为密钥流,通过与同一时刻一个字节的明文

流进行异或(XOR )操作产生密文流.例如,如果发

生器产生的下一字节为01101100,而下一明文字节

为11001100,则得出的密文字节为:

XOR 110011000110110010100000明文

密钥流

密文

解密需要使用相同的伪随机序列:XOR 101000000110110011001100密文密钥流明密文流密码类似于“一次一密”.不同的是,“一次一密”使用的是真正的随机数流,而流密码使用的是伪

随机数流.

设计流密码需要考虑的主要因素:

(1)加密序列的周期要长.伪随机数发生器实质上使用的是产生确定的比特流的函数,该比特流最终将出现重复.重复的周期越长,密码分析的难度就

越大.这与讨论维吉尼亚密码的考虑从本质上是一致的,即密钥越长密码分析越困难.(2)密钥流应该尽可能地接近于一个真正的随

机数流的特征.例如,1和0的个数应近似相等.若

密钥流为字节流,则所有256种可能的字节值出现

的频率应近似相等.密钥流的随机特性越好,则密文

越随机,密码分析就越困难.

(3)伪随机数发生器的输出取决于输人密钥的

值.为了防止穷举攻击,密钥应该足够长,对于分组

密码也要有同样的考虑.因此,从目前的软硬件技术

发展来看,至少应当保证密钥长度不小于128位.

通过设计合适的伪随机数发生器,流密码可以

提供和相应密钥长度分组密码相当的安全性.流密

码的主要优点是,其相对于分组密码来说,往往速度

更快而且需要编写的代码更少.分组密码的优点是

可以重复使用密钥,然而,如果用流密码对两个明文

加密时使用相同的密钥,则密码分析就会相当容易.

如果对两个密文流进行异或,得出的结果就是两个

原始明文的异或.如果明文仅仅是文本串、信用卡号

或者其他已知特征的字节流,则密码分析极易成功.

对于需要对数据流进行加密解密的应用,比如

17—

通过一个数据通信信道或者网页浏览器Web链接,流密码就是很好的解决方案.而对于处理成块的数据,比如文件传输,电子邮件和数据库,分组密码则更为适用.当然,在实际中两种类型的密码都可用于各种应用[1].

2 RC4算法

RC4算法非常简单,易于描述:用从1到256个字节(8到2048位)的可变长度密钥初始化一个256个字节的状态矢量S,S的元素记为S[0],S[1],…, S[255],从始至终置换后的S包含从0到255的所有8比特数.对于加密和解密,字节K由S中256个元素按一定方式选出一个元素而生成.每生成一个K的值,S中的元素就被重新置换一次[2].

2.1 初始化s

开始时,S中元素的值被置为按升序从0到255,即S[0]=0,S[1]=1,…,S[255]=255.同时建立一个临时矢量T.如果密钥K的长度为256字节,则将K赋给T.否则,若密钥长度为keylen字节,则将K的值赋给T的前keylen个元素,并循环重复用K的值赋给T剩下的元素,直到T的所有元素都被赋值.这些预操作可概括如下:

for i=0to255do

S[i]=i;

T[i]=K[i mod keylen]

然后用T产生S的初始置换.从S[0]到S [255],对每个S[i],根据由T[i]确定的方案,将S [i]置换为S中的另一字节:

j=0

for i=O to255do

j=(j+s[i]+T[i])mOd256

swap(s[i],s[j]);

因为对S的操作仅是交换,所以惟一的改变就是置换.S仍然包含所有值为0到255的元素.

2.2 密钥流的生成

矢量S一旦完成初始化,输人密钥就不再被使用.密钥流的生成是从S[0]到S[255],对每个s[i],根据当前S的值,将S[i]与S中的另一字节置换.当S[255]完成置换后,操作继续重复,从S[0]开始: i,j=O

while(true)

i=(i+1)mod256

j=(j+S[i])mod256

swap(s[i],s[j])

t=(s[i]+s[j])mod256;

k=s[t]

加密中,将k的值与下一明文字节异或;解密中,将k的值与下一密文字节异或.

2.3 RC4的强度

关于分析RC4的攻击方法有许多公开发表的文献.但没有哪种方法对于攻击足够长度密钥(如128位)的RC4有效.值得注意的是用于为802.11无线局域网络提供机密性的WEP协议,易于受到一种特殊的攻击方法的攻击.从本质上讲,这个问题并不在于RC4本身,而是作为RC4中输入的密钥的产生途径有漏洞.这种特殊的攻击方法不适用于其他使用RC4的应用,通过修改WEP中密钥产生的途径也可以避免这种攻击.这个问题恰恰说明了设计一个安全系统的困难性不仅包括密码编码函数,还包括协议如何正确地使用这些密码编码函数.

参考文献

[1][美]William Stallings著,刘玉珍,等译.密码编码学与网络安全[M].北京:电子工业出版社,2004.

[1]李克洪,王大玲,董晓梅.实用密码学与计算机数据安全[M].长春:东北大学出版社,2001.

The Stream Cipher of Symmetrical Ciphers

S ON G Wei2pi ng

(Jilin Architecture and civil Engineering Institute Network Information Center,Changchun130021,China)

Abstract:This paper is to discuss one of the stream ciphers in symmetrical cipher probably to be extensively spread.First,it is not only to introduce the whole structure of the stream cipher but also to design the stream cipher concerning the major factors.Then,the paper studies the algorithm.

K ey w ords:symmetrical cipher;stream cipher;encryption;decryption;algorithm

2

7

密码学:解密与加密

这串字在你看来毫无意义,而且它本该如此,因为这是一段加密密码,是信息加密后的结果。但如果我告诉你我所做的,只是把句子里面的每一个字母按照字母表顺序向后移动了一位的话,你就会知道这串字可以翻译成这样。 为了加密短信息,你需要两个关键部分:密码和密钥。密码是一系列规则,告诉你如何加/解密信息,比如前面的密码就是把字母按着照字母表顺序移动特征的位数。密钥告诉你具体如何使用这些规则,否则每次加密的结果都会是一样的,这会使得信息很容易被解码。前面的密码中,密钥为一,因为我们将字母按照字母表向右移动了一位。为了解密信息,你需要知道使用的是何种密码,并且要知道使用的密钥是多少,或者你想破解密文,将可以将所有可能的密钥都尝试一遍,也可以分析密文,尝试倒推结果,这被称作破译。但是有没有可能提出一种密码和密钥的组合,使得加密结果与信息永远没法对应吗?也就是说,是否存在不可破解的密码呢? 人们不断在提出新的,更好的密码,但是很难让密码变得完全不可破解,因为无论你使用何种规则加密信息,只要拥有充足的时间和充足的数据,总能发现加密的规律。我最开始给大

家看到密码,是最古老简单的信息加密方式,这种加密方式常被称为凯撒密码。在凯撒密码中,密钥只是一个数,代表我们将字母向右移动的位数,但是这个密码很容易被破解,即使在你不知道密钥的前提下。因为你可以将25种可能全部尝试一遍,来解码信息。整个字母表可能移动的位数是有限的,字母表中只有26个字母,因此只有25中移位的可能。 凯撒密码属于最简单的一类密码,称为单表代换密码。在这类密码中,信息中的每一个字母都被唯一映射为密文中的一个字母,并且在整个加密过程中,这种映射关系是不变的,简单的说,这种加密方式就是扰乱字母表顺序,在这种情况下,密钥还是一个列表,表示每个字母的映射结果。这种方法中,加密信息的可能映射一共有4*10*26种,所以你估计觉得这密码很难破解。不过我们有很多种方法来破解信息,将所有可能的密钥都尝试一遍,是最显然,也是最没创意的方法,这种方法也有一个很没创意的名字,穷举法。 你也可以尝试一些比较巧妙的方法来破解密码,比如有种方法叫频率分析。这种方法的核心点在于,每一种语言都有其特定的语言特性,举个例子,在英语中字母E出现的频率最高。在我上面说的这句话里,一共出现了7次字母E。还有一些单词,如THE,用的频率非常高,如果不用THE,甚至很难构造完整的句子,密码学家称这些单词为明密对照文。频率

加密技术及密码破解实验报告

第九章、实验报告 实验一、设置Windows启动密码 一、实验目的:利用Windows启动密码保存重要文件。 二、实验步骤: 1、在Windows XP系统中选择开始——运行,在打开输入框中“syskey.exe”,点击确定,打开“保证Windows XP账户数据库的安全”对话框。 2、单击【更新】,打开【启动密码】对话框,然后输入密码,在【确认】文本框中再次输入密码,单击【确定】

实验二、为word文档加密解密 一、实验目的:保护数据的安全 二、实验步骤: 1、打开一个需要加密的文档,选择【工具】——【选项】——【安全性】然后输入想要设置打开文件时所需的密码 2、单击【高级(A)】打开加密类型对话框,选中【加密文档属性】复选框,单击【确定】。

3、打开文件的【确认密码】对话框,输入打开文件时需要的密码,单击【确定】,随即打开【确认密码】对话框,输入密码。 4、保存文件后,重新打开Word文档,打开【密码】,输入打开文件所需的密码,单击【确定】输入修改的密码,单击【确定】 破解word密码 (1)安装Advanced Office Password Recovery软件,安装完成后打开需要破解的word 文档,进行暴力破解,结果如图所示: 实验三、使用WinRAR加密解密文件

一.实验目的:加密文件,保证文件的安全性。 二.实验步骤: 1、在需要加密的文件夹上右击,选中【添加到压缩文件】打开【压缩文件名和参数】 2、选中【压缩文件格式】组合框中的【RAR】并在【压缩选项】中选中【压缩后删除源文件】然后切换到【高级】,输入密码,确认密码。 3、关闭对话框,单击确定,压缩完成后,双击压缩文件,系统打开【输入密码对话框】 破解WinRAR加密的文件 (1)安装Advanced RAR Password Recovery软件,打开WinRAR加密文件,进行暴力破解,获得密码。结果如图:

文件的加密解密压缩和压缩文件密码的管理

日常生活中我们通常会分享一些个人视频,但处于隐私考虑,我们会想到给文件加密,嗯,不错,但是我们常用的的视频格式是不支持文件加密的,怎么办?看到网上一些网站有时分享软件时会将软件打包成RAR或ZIP压缩格式并加密,只有访问网站源地址才能获得密码,即提高了网站访问量又将一些不太好找的软件分享给大家。那么我们就依照这个思路用压缩软件压缩视频并加密后上传到各大网盘分享给朋友,这样不仅间接的将视频进行了加密,保护了我们的个人隐私,更是将较大的视频文件批量的进行了分享。但很多人只进行过文件的解压/压缩,并不知道如何加密或者是并不会进行灵活的加密密码管理,这里笔者就像大家介绍一下如何给文件加密压缩并管理密码。 一般的常规方法是选定要压缩的文件并右击,在弹出的菜单中选择“添加到压缩文件” 弹出压缩选项,1.选定压缩格式 2.点击“设置密码”在这里笔者要说一下,如果选定RAR格式,在解压或打开时不会显示包内文件名,而选定ZIP格式,在解压或打开时会显示包内文件名,所以笔者建议大家如果对文件的保密程度要求较高那么就选RAR格式,因为ZIP格式不支持文件名加

密。 设置好密码点击“确定” 等待文件压缩好,这样就完成了文件的压缩加密

当然,我们有时要对没有加密的压缩文件设定密码,需要注意的是下列方法需要使用好压软件,并且文件格式为ZIP(RAR文件不支持),笔者上述使用的WINRAR无法进行下列操作,大家需要用好压进行操作。 先打开这个压缩文件,点击“文件”-“密码” 弹出窗口后选择“密码”选项卡,点击“设置新的密码”设置好密码然后点击“确定”即可

如果你想把压缩包中的密码清除掉,则选“清除已有密码”,然后点“确定”,会弹出提示让你输入之前设置的密码,输入后确定即可清除掉密码 下面笔者再介绍一下在WINRAR中的文件压缩密码管理 首先打开WINRAR,然后选择“选项”-“设置”

凯撒密码的加密和解密

关于凯撒密码的实现原理 班级:姓名:学号:指导老师: 一、设计要求说明 1、设计一个凯撒密码的加密和解密的程序,要求输入一段字符和密码,输出相应的密文,完成加密过程; 若输入被加密的密文及解密密钥,能还原出原文,完成解密。 2、语言不限,工具不限,独立完成,参加答辩。 3、严格按照格式的要求完成文档,在第六部分的运行结果分析中,要求抓图说明。 二、基础知识介绍 凯撒密码的历史 凯撒密码(caeser)是罗马扩张时期朱利斯?凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。 古罗马随笔作家修托尼厄斯在他的作品中披露,凯撒常用一种“密表”给他的朋友写信。这里所说的密表,在密码学上称为“凯撒密表”。用现代的眼光看,凯撒密表是一种相当简单的加密变换,就是把明文中的每一个字母用它在字母表上位置后面的第三个字母代替。古罗马文字就是现在所称的拉丁文,其字母就是我们从英语中熟知的那26个拉丁字母。因此,凯撒密表就是用d代a,用e代b,……,用z代w。这些代替规则也可用一张表格来表示,所以叫“密表”。 基本原理 在密码学中存在着各种各样的置换方式,但所有不同的置换方式都包含2个相同的元素。密钥和协议(算法)。凯撒密码的密钥是3,算法是将普通字母表中的字母用密钥对应的字母替换。置换加密的优点就在于它易于实施却难于破解. 发送方和接收方很容易事先商量好一个密钥,然后通过密钥从明文中生成密文,即是敌人若获取密文,通过密文直接猜测其代表的意义,在实践中是不可能的。 凯撒密码的加密算法极其简单。其加密过程如下: 在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里k1=k2,不妨记为k)。凯撒密码的加密过程可记为如下一个变换:c≡m+k mod n (其中n为基本字符个数) 同样,解密过程可表示为: m≡c+k mod n (其中n为基本字符个数) 对于计算机而言,n可取256或128,m、k、c均为一个8bit的二进制数。显然,这种加密算法极不安全,即使采用穷举法,最多也只要255次即可破译。当然,究其本身而言,仍然是一个单表置换,因此,频率分析法对其仍是有效的。 加密解密算法 恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3): 明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ 密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC 使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如: 明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ 恺撒密码的加密、解密方法还能够通过同余数的数学方法进行计算。首先将字母用数字代替,A=0,B=1,...,Z=25。此时偏移量为n的加密方法即为:

维吉尼亚密码(Vigenere)加密与解密源代码

维吉尼亚密码解密:(java版) import javax.swing.JOptionPane; class VigenereEncrypt{ public static void main(String[] args){ int plainlen,keylen,i,j=0,a; String cipherText=""; String s1 = JOptionPane.showInputDialog(null,"Enter the PlainText","Input PlainText Demo",JOptionPane.QUESTION_MESSAGE); String s2 = JOptionPane.showInputDialog(null,"Enter the Key","Input Key Demo",JOptionPane.QUESTION_MESSAGE); plainlen = s1.length(); keylen = s2.length(); for(i=0;i

凯撒密码的加密和解密

关于凯撒密码的实现原理 班级::学号:指导老师: 一、设计要求说明 1、设计一个凯撒密码的加密和解密的程序,要求输入一段字符和密码,输出相应的密文,完成加密过程; 若输入被加密的密文及解密密钥,能还原出原文,完成解密。 2、语言不限,工具不限,独立完成,参加答辩。 3、严格按照格式的要求完成文档,在第六部分的运行结果分析中,要求抓图说明。 二、基础知识介绍 凯撒密码的历史 凯撒密码(caeser)是罗马扩时期朱利斯?凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。 古罗马随笔作家修托尼厄斯在他的作品中披露,凯撒常用一种“密表”给他的朋友写信。这里所说的密表,在密码学上称为“凯撒密表”。用现代的眼光看,凯撒密表是一种相当简单的加密变换,就是把明文中的每一个字母用它在字母表上位置后面的第三个字母代替。古罗马文字就是现在所称的拉丁文,其字母就是我们从英语中熟知的那26个拉丁字母。因此,凯撒密表就是用d代a,用e代b,……,用z代w。这些代替规则也可用一表格来表示,所以叫“密表”。 基本原理 在密码学中存在着各种各样的置换方式,但所有不同的置换方式都包含2个相同的元素。密钥和协议(算法)。凯撒密码的密钥是3,算法是将普通字母表中的字母用密钥对应的字母替换。置换加密的优点就在于它易于实施却难于破解. 发送方和接收方很容易事先商量好一个密钥,然后通过密钥从明文中生成密文,即是敌人若获取密文,通过密文直接猜测其代表的意义,在实践中是不可能的。 凯撒密码的加密算法极其简单。其加密过程如下: 在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里k1=k2,不妨记为k)。凯撒密码的加密过程可记为如下一个变换:c≡m+k mod n (其中n为基本字符个数) 同样,解密过程可表示为: m≡c+k mod n (其中n为基本字符个数) 对于计算机而言,n可取256或128,m、k、c均为一个8bit的二进制数。显然,这种加密算法极不安全,即使采用穷举法,最多也只要255次即可破译。当然,究其本身而言,仍然是一个单表置换,因此,频率分析法对其仍是有效的。 加密解密算法 恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3): 明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ 密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC 使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如: 明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ 恺撒密码的加密、解密方法还能够通过同余数的数学方法进行计算。首先将字母用数字代替,A=0,B=1,...,Z=25。此时偏移量为n的加密方法即为:

凯撒密码的加密和解密

密码的原理与实现 一、基础知识介绍 凯撒密码的历史 凯撒密码(caeser)是罗马扩张时期朱利斯?凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。 古罗马随笔作家修托尼厄斯在他的作品中披露,凯撒常用一种“密表”给他的朋友写信。这里所说的密表,在密码学上称为“凯撒密表”。用现代的眼光看,凯撒密表是一种相当简单的加密变换,就是把明文中的每一个字母用它在字母表上位置后面的第三个字母代替。古罗马文字就是现在所称的拉丁文,其字母就是我们从英语中熟知的那26个拉丁字母。因此,凯撒密表就是用d代a,用e代b,……,用z代w。这些代替规则也可用一张表格来表示,所以叫“密表”。 当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。 基本原理 在密码学中存在着各种各样的置换方式,但所有不同的置换方式都包含2个相同的元素。密钥和协议(算法)。凯撒密码的密钥是3,算法是将普通字母表中的字母用密钥对应的字母替换。置换加密的优点就在于它易于实施却难于破解. 发送方和接收方很容易事先商量好一个密钥,然后通过密钥从明文中生成密文,即是敌人若获取密文,通过密文直接猜测其代表的意义,在实践中是不可能的。 凯撒密码的加密算法极其简单。其加密过程如下: 在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里不妨假设k1=k2,记为k)。凯撒密码的加密过程可记为如下一个变换: c≡m+k mod n (其中n为基本字符个数) 同样,解密过程可表示为:

西门子 PLC加密与解密方法汇总

传统300PLC加密与解密 一、加密: A、MMC加密:硬件组态中打开CPU的属性的保护选项,选第三个设置(读写保护),设置密码后保存编译重新下载硬件组态就可以了。

这里输了一个“1234567”的密码。 B、功能块的保护 单个功能块只能保护,不能加密码,需要注意加密后的源文件一定要保存好,如果丢失或删除了源文件就无法打开自己的程序了。 如何实现程序块保护: 1.打开程序编辑窗口LAD/FBD/STL; 2.将要进行加密保护的程序块生成转换为源代码文件(通过选择菜单文件—>生成源文件);

3.在LAD/FBD/STL 窗口中关闭您的程序块,并在SIMATIC Manager项目管理窗口的源文件文件夹中打开上一步所生成的源文件; 4.在程序块的声明部分,TITLE行下面的一行中输入”KNOW_HOW_PROTECT”; 5.存盘并编译该源文件(选择菜单文件—>保存,文件—>编译); 6.现在就完成了您程序块的加密保护;

二、解密: 先用S7-MMC (S7imgRD)读卡,建一个 .s7img的文件,再用s7 200/300解锁打开该文件,按一下password下的S7-300密码就会出现,有了密码这样你就可以在线把程序下下来,如果程序加了锁再用124725这个软件解锁即全搞定。 1、选择S7imgRD软件 2、把MMC卡从PLC上取下来,用MMC读卡器连接到电脑,并在S7imgRD软件中选择MMC卡盘符。点击Start ,另存一个 .s7img的文件

3、点开223925软件

4、选择File—>Open 选择之前保存的*.s7img的文件 5、选择Password—> S7300 这样就出现了S7-300的密码。 6、如果需要解程序的锁,再用124725这个软件解锁。选择需要解锁的程序,选择需要解锁的块,点击解锁即可。

相关文档
最新文档