一.RC4算法

参考RC4加密算法的过程 代入例子计算

二.c语言实现

#include <stdio.h>
#include <string.h>
unsigned char sbox[256] = { 0 };
void swap(unsigned char* a, unsigned char* b)
{unsigned char tmp = *a;*a = *b;*b = tmp;
}
void init_sbox( unsigned char key[]) {for (unsigned int i = 0; i < 256; i++)//赋值sbox[i] = i;unsigned int keyLen = strlen((char*)key);unsigned char Ttable[256] = { 0 };for (int i = 0; i < 256; i++)Ttable[i] = key[i % keyLen];//根据初始化t表for (int j = 0, i = 0; i < 256; i++){j = (j + sbox[i] + Ttable[i]) % 256;    //打乱s盒swap(sbox[i], sbox[j]);}
}
void RC4_enc_dec(unsigned char data[],unsigned char key[]){unsigned char k, i = 0, j = 0, t;init_sbox(key);unsigned int dataLen = strlen((char*)data);for (unsigned h = 0; h < dataLen; h++){i = (i + 1) % 256;j = (j + sbox[i]) % 256;swap(sbox[i], sbox[j]);t = (sbox[i] + sbox[j]) % 256;k = sbox[t];    //求密钥流,并对明文加密data[h] ^= k; }
}int main()
{unsigned char data[1000] = { 0 };unsigned char key[100] = { 0 };printf("请输入需要加密的明文:\n");scanf("%s", data);printf("请输入密钥key:\n");scanf("%s", key);RC4_enc_dec(data, key);printf("加密后的密文是:\n,%s",data);RC4_enc_dec(data, key);printf("解密后的明文是:\n%s", data);return 0;
}

运行效果:

三.c++实现

#include <iostream>
#include <string>
using namespace std;
class RC4 {
private:unsigned char s[256];void swap(unsigned char& a, unsigned char& b){unsigned char tmp = a;a = b;b = tmp;}void init_sbox(string key){for (unsigned int i = 0; i < 256; i++)  //初始化s盒s[i] = i;unsigned char T[256] = { 0 };unsigned keylen = key.length();for (int i = 0; i < 256; i++)T[i] = key[i % keylen];              //根据密钥初始化t表for (int j = 0, i = 0; i < 256; i++){j = (j + s[i] + T[i]) % 256;      //打乱s盒swap(s[i], s[j]);}}
public :void enc_dec(string& data,string key) {init_sbox(key);unsigned int datalen = data.length();unsigned char k, i = 0, j = 0, t;for (unsigned int h = 0; h < datalen; h++){i = (i + 1) % 256;j = (j + s[i]) % 256;swap(s[i], s[j]);t = (s[i] + s[j]) % 256;k = s[t];data[h] ^= k;}}
};int main()
{RC4 rc4 ;string data, key;cout << "请输入需要加密的明文:" << endl;cin >> data;cout << "请输入密钥key:" << endl;cin >> key;rc4.enc_dec(data, key);cout << "加密后的内容是:\n" << data << endl;rc4.enc_dec(data, key);cout << "解密后的内容是:\n" << data << endl;return 0;
}

运行效果:

RC4算法c/c++语言实现相关推荐

  1. 十种经典排序算法精粹(c语言版本)

    下面给出这段时间我苦心研究验证过的十种经典排序算法的C语言版本,即下面的排序算法: 插入排序,shell排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,桶排序,基数排序和计数排序.整理出来以作备 ...

  2. 迪杰斯特拉算法(C语言实现)

    迪杰斯特拉算法(C语言实现) 如上图,求以a为源点到个顶点的最短路劲. #include "stdio.h" #include "stdlib.h" //用一个 ...

  3. 【每日算法】C语言8大经典排序算法(2)

    接上文--->[每日算法]C语言8大经典排序算法(1) 二.插入类排序 插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中 ...

  4. python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

    数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...

  5. c代码实现 ifft运算_fft算法c语言_matlab fft算法_ifft c语言

    FFT快速算法C程序_工学_高等教育_教育专区.电子信息工程综合课程设计报告书 DSP 课程设计 报告 题学 目: 院: FFT 快速算法 C 程序 计算机与信息工程学院 09 ... fft算法代码 ...

  6. 用c语言实现蚂蚁算法,rsa算法的c语言实现

    rsa算法的c语言实现 RSA 算法的 C 语言实现一.RSA 算法的描述 1.选取长度相等的两个大素数 p 和 q,计算其乘积: n=pq 然后随机选取加密密钥 e,使 e 和 (p–1)(q–1) ...

  7. 四阶龙格库塔c语言,四阶龙格库塔算法的C语言实现

    解微分方程 2001年3月焦作大学学报 JOURNALOFJIAOZUOUNIVERSITY№ 1Mar.2001第1期 四阶龙格一库塔算法的C语言实现 毋玉芝 (焦作财会学校) 摘要本文叙述了四阶龙 ...

  8. RC4算法及其实践(Hello Password)

    Hello Password 一个简单的安全密码管理工具. Why? 因为我无法信任网上的密码管理软件.另外,加密数据离开对应的密码管理软件无法解析,这个问题困扰着我. 所以,不如自己写一个简简单单的 ...

  9. c语言程序位置式pid算法,位置式PID算法的C语言代码

    描述 位置式PID的C语言写法详解 PID调节口诀: 参数整定找最佳,从小到大顺序查 先是比例后积分,最后再把微分加 曲线振荡很频繁,比例度盘要放大 曲线漂浮绕大湾,比例度盘往小扳 曲线偏离回复慢,积 ...

最新文章

  1. eclipse提示在***类中找不到main方法
  2. std::string的find问题研究
  3. 因为你组织的安全策略阻止未经身份验证的来宾(试了很多种办法都不行)
  4. 【温故知新】CSS学习笔记(盒子内边距介绍)
  5. boost::core模块实现分配构造throws
  6. 华为USG防火墙双机热备(业务口工作在三层上下行连接路由器)
  7. java web应用开发渐进教程_Java Web应用开发渐进教程
  8. linux uwsgi 非root,nginx – 只能用root运行uwsgi
  9. ES6学习摘要(03)(新人学习)
  10. 【面试】网易游戏社招一面总结
  11. ios支付 选择货币_iOS In-App Purchase中涉及到的货币单位
  12. Matlab动态PID仿真及PID知识梳理
  13. html如何适配设备高度,css怎样自适配屏幕高度?
  14. 【慕课网】前端零基础入门---步骤一:页面结构层HTML---03-HTML表单
  15. 如何使用vitis_历时5年Vitis正式面世,赛灵思转型软件平台公司
  16. webrtc中的带宽自适应算法
  17. Angular Img标签自定义请求header Authorization
  18. Matlab数字图像的傅里叶变换(FFT)
  19. [51nod1299]监狱逃离 树形DP || 20w个点的网络流最小割ORZ
  20. docker 应用系列(一)--- 一步步搭建虚拟机 docker 环境 附有 vue-cli + nginx 应用

热门文章

  1. 在线教育专业建站工具 EduWind ,源码下载,源码分享网整理
  2. ubuntu 死机原因及解决方法
  3. 【小教程】Potplayer配置 播完停止+打开单个文件非文件夹+单个播放器打开文件
  4. java后端获取前端请求参数
  5. GNSS接收机的分类
  6. js小游戏之经典炸弹人(2)--玩家的移动
  7. c,c++小白到大神系列教程之一:C语言入门-王健伟-专题视频课程
  8. 前端资源汇总大全(含精品)
  9. 华为p9plus误删文件怎么恢复
  10. Linux学习(4)---cp(复制命令)