RC4密码简介:
RC4是由美国密码学家Ron Rivest在1987年设计的流密码算法,该算法被广泛用于 SSL/TLS协议(Socket Secure Layer, SSL)/(Transport Layer Security, TLS),WEP(Wired Equivalent Privacy, WEP)协议和 WPA(Wi-Fi Protected Access, WPA)协议,也作为蜂窝数字数据包规范的一部分。
RC4是一种基于非线性变换的流密码算法。该算法包括两部分:
(1)密钥编制算法KSA(Key Sehedule Algorithm); 用可变长度的密钥产生密钥流生成器的初始状态S0S_0S0​。
(2)伪随机序列生成算法 PRGA(Pseudo Random Generation Algorithm);根据初始状态 S0S_0S0​产生密钥流序列,最终与明文相异或产生密文。

RC4的实现步骤:
部分1 KSA实现步骤:

  1. 随机选取一个密钥Key,初始化 S 盒。
  2. iti_tit​遍历 S 盒中的每一个位置,iti_tit​的每一次更新都会使得 jtj_tjt​ 在 St−1S_{t-1}St−1​ [iti_tit​] 和Key的作用下产生一个新值。
  3. 交换StS_tSt​中jtj_tjt​和iti_tit​对应的两个字节。经过N步遍历后KSA产生了RC4的初始状态s0s_0s0​。RC4的密钥。

伪代码实现:

KSA(Key, S)
for i = 0 to N-1
i0i_0i0​ = 0, j0j_0j0​ = 0;
where t = 1,2,…,N
jtj_tjt​ = jt−1j_{t-1}jt−1​+St−1S_{t-1}St−1​[it−1i_{t-1}it−1​] + Key[it−1i_{t-1}it−1​ mod 1];
StS_tSt​[iti_tit​] = St−1S_{t-1}St−1​[jtj_tjt​], StS_tSt​[jtj_tjt​] = St−1S_{t-1}St−1​[iti_tit​];
iti_tit​ = it−1i_{t-1}it−1​ + 1;

部分2 PRGA实现步骤
伪随机序列的生成原理是不断地变换 S 盒中的元
素的位置,同时从中选择一元素输出,即伪随机序列,也
称密钥流序列。

  1. 根据 KSA 的初始状态表S0S_0S0​,初始化针iti_tit​和jtj_tjt​。
  2. 更新该算法中的 j, 同时交换StS_tSt​中iti_tit​和jtj_tjt​对
    应的字节。
  3. 伪随机序列生成器不断地变换S盒中字节的位置,每次改变后将 S 中 StS_tSt​ [iti_tit​] + StS_tSt​ [jtj_tjt​] 位置的值输出,即为8比特的密钥流输出字节,输出的字节序列是{ZtZ_tZt​} (t : 0 -> ∞\infty∞),{ZtZ_tZt​}与明文异或加密,与密文异或解密。

伪代码实现:

PRGA(S0S_0S0​)
Initialization:
i0i_0i0​ = 0;
j0j_0j0​ = 0;
while(true)
iti_tit​ =
(it−1i_{t-1}it−1​ + 1) mod N;
jtj_tjt​ = (jt−1j_{t-1}jt−1​ + St−1S_{t-1}St−1​[iti_tit​]) mod N;
StS_tSt​[iti_tit​] = St−1S_{t-1}St−1​[jtj_tjt​], StS_tSt​[jtj_tjt​] = St−1S_{t-1}St−1​[iti_tit​];
ZtZ_tZt​ = StS_tSt​[(StS_tSt​[iti_tit​] + StS_tSt​[jtj_tjt​]) mod N];
output ZtZ_tZt​
endwhile

OpenSSL代码应用:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <openssl/rc4.h>
int main(int argc, char* argv[])
{RC4_KEY key;const char* data = "Hello,World!!";const char* indata = "This is plain text !!!!";int length = strlen((char *)data);int len = strlen((char*)indata);RC4_set_key(&key, length, (const unsigned char *)data);            //设置密钥unsigned char* outdata;                                            //分配密文空间outdata = (unsigned char*)malloc(sizeof(unsigned char) * (len + 1));memset(outdata, 0, len + 1);                                       //初始为0printf("\tindata=%s\n", indata);RC4(&key, strlen(indata), (const unsigned char*)indata, outdata);  //加密明文printf("\toutdata=%s\n", outdata);unsigned char* plain;                                              //分配明文空间plain = (unsigned char*)malloc(sizeof(unsigned char) * (len + 1));memset(plain, 0, len + 1);                                         //初始化为0RC4_set_key(&key, length, (const unsigned char*)data);             //重新设置密钥RC4(&key, strlen((char *)outdata), outdata, plain);                //解密密文printf("\tplain=%s\n", plain);return 0;
}

运行结果如下:

RC4算法原理与应用 —— 密码与密码工程实践No.1相关推荐

  1. RC4算法原理、Java实现RC4加密算法、DES AES RC4算法比较

    DES AES RC4算法比较 根据密钥类型的不同,加密算法分为对称和非对称两种.对称加密系统是指加密和解密均采用同一把密钥. 对称加密算法是最常用的加密算法,优势在于算法公开,计算量小,加密效率高. ...

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

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

  3. 安全密码c语言编程,商用密码算法原理与C语言实现

    2020年1月1日,<中华人民共和国密码法>正式施行.国家鼓励和支持密码科学技术研究与应用,促进密码科学技术进步与创新,加强密码人才培养和队伍建设,采取多种形式加强密码安全教育.本书是在国 ...

  4. 国密SM3密码杂凑算法原理及实现(附源码)

    相关文章: 国密SM3哈希算法原理及实现(附源码) SHA1哈希算法原理及实现(附源码) MD5哈希算法原理及实现(附源码) MD4哈希算法原理及实现(附源码) MD2哈希算法原理及实现(附源码) M ...

  5. php使用ecc算法进行签名,密码之ECC算法原理的认识

    转:https://blog.csdn.net/sszgg2006/article/details/41945163 公开密钥算法总是要基于一个数学上的难题.比如RSA 依据的是:给定两个素数p.q ...

  6. 机器人门禁控制盒怎么接线方法_RFID门禁系统原理、初始密码、密码修改方法...

    现在,科技进步的速度越来越快,如今就连门锁都使用上了高科技,不知道大家有没有听说过RFID门禁系统,所谓RFID就是Radio Frequency Identification的缩写,即射频识别,可能 ...

  7. RSA算法与维吉尼亚密码

    RSA算法 RSA算法描述 第1步:用两个很大的互异的质数p和q(p和q必须保密),计算它们的乘积n=pq:n是模数. 第2步:选择一个比n小的数e,它与(p-1)(q-1)互为质数,即除了1以外,e ...

  8. XDOJ例题及答案第八更 密码编译 密码强度 排序2 排序3 排序算法比较器 判断奇偶性 平均数 气温波动 亲和数 求交错序列前N项和 求平均值求奇数的和

    目录 密码编译 密码强度 排序2 排序3 排序算法比较器 判断奇偶性 平均数 气温波动 亲和数 求交错序列前N项和 求平均值 求奇数的和 密码编译 #include<stdio.h> in ...

  9. RC4加密解密算法原理及实现对文件的加解密

    本文简单实现了RC4算法对于文件的加解密,并已经验证成功.同时实现了对RC4算法加解密较大文件的测速 RC4加密解密算法的原理: 首先,通过我的理解,RC4算法所依赖的最根本原理是:对明文使用同一个密 ...

最新文章

  1. Oracle错误ORA-01800——ORA-01899
  2. php错误以及常用笔记
  3. android开发入门与实践_Electron从入门到实践,前端开发者开发桌面App的最佳选择...
  4. 物理内存不够用,临时增大Linux交换分区的方法
  5. UVA 558 SPFA 判断负环
  6. ISA2006之二---client
  7. 人群与网络:关系的平衡
  8. C++游戏编程-走迷宫详解
  9. B站笔试真题之[编程题]脸滚键盘
  10. Data Structure - Pairing Heap (Java)
  11. 看图说话!这个 AI 商品识别系统开源了!
  12. ElasticSearch7学习笔记之Mapping
  13. matlab图像进行变换
  14. 数据库的学习笔记(一)
  15. Java毕设项目线上教学平台(java+VUE+Mybatis+Maven+Mysql)
  16. gnome桌面无法显示的解决
  17. 2021年秋季PAT乙级题解(C语言)
  18. pycharm 激活码2018年9月22日亲测有效
  19. 招聘 | 上海交通大学医学院附属精神卫生中心诚招科研助理
  20. 【STM32H7】第4章 RTX5操作系统移植(MDK AC5)

热门文章

  1. [GUI] ESP32(idf)驱动3.5寸SPI-TFT屏移植LittleVGL
  2. Element-ui中 使用图片查看器(el-image-viewer) 预览图片
  3. 拓商:在拼多多开店,商家如何做好推广?
  4. android模拟器被覆盖,教大家如何顺利恢复雷电安卓模拟器的数据
  5. Win10+Ubuntu18.04双系统安装配置教程(七)——安装搜狗输入法
  6. python 两个dataFrame取不同部分
  7. React-Hook API个人见解
  8. 怎么从开源库github.com 下载
  9. 人工智能那么厉害,那它懂幽默吗?(楚才国科)
  10. 实习打杂记录,xboot中使已上传文件能够下载。