目录

1.认识RC4算法

2.RC4算法思想

3.RC4算法过程

3.1 初始化S

3.2 建立临时矢量K

3.3用K对S进行初始置换

3.4生成密码流

3.5 加密过程

3.6 解密过程


1.认识RC4算法

  • 可变密钥长度的,面向字节操作的流密码:8到2048位可变
  • 在SSL/TLS和IEEE 802.11无线网中应用: WEP协议

2.RC4算法思想

  • 用可变长度密钥初始化长度为256字节的矢量S: S[1],S[2],S[3],......S[255]
  • 矢量S形成算法的内部状态
  • 密码流字节K由S中255个元素按照一定方式选出一个元素来生成
  • 每生成一个子密码,S中的元素就被重新置换一次

3.RC4算法过程

3.1 初始化S

  • 初始条件:密钥种子key[],密钥初始化向量S
  • 初始化S: S中元素被置为按升序从0到255(S[0]=0,S[1]=1,.....,S[255]=255)

3.2 建立临时矢量K

  • 如果密钥种子Key[]的长度为256字节,则将Key赋值给K
  • 否则将Key[]的值赋给K的前N个元素(N为密钥Key[]的长度)
  • 循环重复用Key[]的值赋给K剩下的元素,直到K的所有元素都被赋值

3.3用K对S进行初始置换

从S[0]到S[255],对每个S[i],根据由K[i]确定的方案,将S[i]置换为S中的其他一个字节

class codeTransction{public void permutation(Integer S[],Integer T[],char K[]){for(int i=0;i<256;i++){S[i] = i;}int t[] = new int[256];for(int i=0;i<256;i++){t[i]=K[i%K.length];T[i] = t[i];}int j = 0;for(int i=0;i<255;i++){j = (j+S[i]+T[i])%256;//交换S[i] 和 S[j]int temp;temp = S[i];S[i] = S[j];S[j] = temp;}}

3.4生成密码流

密码流KeyStramByte的生成是从S[]选择一个元素

public void GenerateKeys(Integer S[],int n,char keys[]){int i=0,j=0,t;for(int k=0;k<n;k++){i = (i+1)%256;j = (j+S[i])%256;int temp;temp = S[i];S[i] = S[j];S[j] = temp;t = (S[i]+S[j])%256;keys[k] = (char) S[t].intValue();}}

3.5 加密过程

将Keys和下一个明文字节进行异或运算

public String encrupt(char keys[],char P[],char C[],int n){for(int i=0;i<n;i++){int result;result = P[i]^keys[i];C[i] = (char)result;}String o = new String(C);return o;}

3.6 解密过程

  • 接收方按照相同的方法生成keys值
  • 将Keys值与下一个密文字节异或
public String decrypt(char keys[],int n,char C[]){char D[] = new char[256];for(int i=0;i<n;i++){int result;result = C[i]^keys[i];D[i] = (char)result;}String o = new String(D);return o;}

import java.util.Scanner;public class RC4 {public static void main(String args[]){codeTransction c1 = new codeTransction();Scanner sc = new Scanner(System.in);System.out.println("密钥:");String k1 = sc.next();int len = k1.length();char K[] = new char[len];//密钥空间for(int i=0;i<len;i++){K[i] = k1.charAt(i);}Integer S[] = new Integer[256];Integer T[] = new Integer[256];c1.permutation(S,T,K);//S表进行排序System.out.println("明文:");String p = sc.next();int n = p.length();char P[] = new char[n];//明文空间for(int i=0;i<n;i++){P[i] = p.charAt(i);}char keys[] = new char[n];c1.GenerateKeys(S,n,keys);char C[] = new char[n];System.out.println("------------");String cc = c1.encrupt(keys,P,C,n);System.out.println("密文:");System.out.println(cc);for(int i=0;i<n;i++){C[i] = cc.charAt(i);}System.out.println("--------");String pp = c1.decrypt(keys,n,C);System.out.println("明文:");System.out.println(pp);}
}
class codeTransction{public void permutation(Integer S[],Integer T[],char K[]){for(int i=0;i<256;i++){S[i] = i;}int t[] = new int[256];for(int i=0;i<256;i++){t[i]=K[i%K.length];T[i] = t[i];}int j = 0;for(int i=0;i<255;i++){j = (j+S[i]+T[i])%256;//交换S[i] 和 S[j]int temp;temp = S[i];S[i] = S[j];S[j] = temp;}}public void GenerateKeys(Integer S[],int n,char keys[]){int i=0,j=0,t;for(int k=0;k<n;k++){i = (i+1)%256;j = (j+S[i])%256;int temp;temp = S[i];S[i] = S[j];S[j] = temp;t = (S[i]+S[j])%256;keys[k] = (char) S[t].intValue();}}public String encrupt(char keys[],char P[],char C[],int n){for(int i=0;i<n;i++){int result;result = P[i]^keys[i];C[i] = (char)result;}String o = new String(C);return o;}public String decrypt(char keys[],int n,char C[]){char D[] = new char[256];for(int i=0;i<n;i++){int result;result = C[i]^keys[i];D[i] = (char)result;}String o = new String(D);return o;}
}

信息安全·——常用算法(RC4)相关推荐

  1. 密码算法的概念及常用算法整理

    最近实在太忙,很早就整理好的东西,但是一直抽不出时间发,今天准备连续发三篇最近对密码这块内容的整理,我也是密码学的初学者,解释不到的地方欢迎指点,谢谢!接下来开始学习密码算法吧! 1.密码算法概念介绍 ...

  2. C语言常用算法 脚本之家,C/C++常用算法手册 秦姣华 中文pdf扫描版 22.5MB

    <C/C++常用算法手册>分3篇,共13章,"第1篇算法基础篇"介绍了算法概述,重点分析了数据结构和基本算法思想:"第2篇算法基本应用篇"详细讲解了 ...

  3. 集体智慧及其常用算法

    集体智慧定义 是指由许多的个体通过合作与竞争中所显现出来的智慧,集体智慧是一种共享的或者群体的智能.它是从许多个体的合作与竞争中涌现出来的.集体智慧在细菌.动物.人类以及计算机网络中形成,并以多种形式 ...

  4. 【NLP】为什么中文分词比英文分词更难?有哪些常用算法?(附代码)

    导读:人类文明的重要标志之一是语言文字的诞生.数千年来,几乎人类所有知识的传播都是以语言和文字作为媒介. 自然语言处理是使用计算机科学与人工智能技术分析和理解人类语言的一门学科.在人工智能的诸多范畴中 ...

  5. 图解:轻松看懂机器学习十大常用算法

    源 / 人人宽客 通过本篇文章大家可以对ML的常用算法形成常识性的认识.没有代码,没有复杂的理论推导,仅是图解,介绍这些算法是什么以及如何应用(例子主要是分类问题).以后有机会再对单个算法做深入地解析 ...

  6. 轻松看懂机器学习十大常用算法

    本文转载自CSDN aliceyangxi1987的博客 通过本篇文章可以对机器学习(machine learning, ML)的常用算法有个常识性的认识,没有代码,没有复杂的理论推导,就是图解一下, ...

  7. 句法分析常用算法框架以及NLPIR、Dependency Viwer

    句法分析常用算法框架以及NLPIR.Dependency Viwer 目录 句法分析常用算法框架以及NLPIR.Dependency Viwer 句法分析框架 北京理工大学NLPIR

  8. dataframe常用操作_【Data Mining】机器学习三剑客之Pandas常用算法总结上

    一.前言 看pandas之前我建议先看我的numpy总结,效果更佳. SEU-AI蜗牛车:[Data Mining]机器学习三剑客之Numpy常用算法总结​zhuanlan.zhihu.com 可以 ...

  9. 推荐系统中常用算法 以及优点缺点对比

    推荐系统中常用算法 以及优点缺点对比 2014/09/20 [Martin导读]随着互联网特别是社会化网络的快速发展,我们正处于信息过载的时代.用户面对过量的信息很难找到自己真正感兴趣的内容,而内容提 ...

最新文章

  1. C#, CLR, and .NET Framework versions
  2. 监听以太网(一) Packet32包说明
  3. Go 高性能编程技法
  4. 三层架构与MVC的区别
  5. 最小编辑代价-golang
  6. hive建表语句_Hive数据如何同步到MaxCompute之实践讲解
  7. Vue父组件向子组件传值
  8. 卫星定位领域相关基础知识汇总
  9. 偷用计算机作文,【实用】《偷着》作文500字4篇
  10. PostgreSQL命令行常用命令psql
  11. 360锁屏壁纸超级好看,于是想保存下来。
  12. Power BI-同比、环比、累计值
  13. pd.read_csv报错:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xc8 in position 0: invalid contin
  14. [转载] Rooting with a Locked Boot Loader
  15. 关于height:100%的简单理解
  16. diskgenius系统迁移_关于系统迁移至SSD
  17. 计算机、网络安全、CTF资源总结-The_Growth_Path_Of_A_Pwner(一名安全从业者的成长之路)
  18. 【数学】有效的正方形 勾股定理
  19. 2016秋季找工作纪实
  20. 横扫阿里、滴滴、美团后,3年经验的Java后端妹子整理出这份厚厚的面经!

热门文章

  1. Java多级菜单树转为面包屑
  2. 阿里云牵手英伟达推出初创加速计划,算力触手可得
  3. 库函数和c语言的关系,C语言与C语言库函数是什么关系
  4. 【CVPR 2021】通用的实例级蒸馏:General Instance Distillation for Object Detection
  5. 如何用三只小猫启动tomcat关联eclipse
  6. python编程制作接金币游戏_pygame闪电侠接金币整套源代码
  7. 批量双层压缩小工具7z格式增强版
  8. android+so+upx,UPX压缩壳简介
  9. shell zsh bash ash tcsh的差别和关系
  10. webrtc服务器mediasoup源码分析