前言
本篇文章简单记录一个我自己改写的RC4加密算法,用来加密图片
一、RC4密码介绍
RC4密码是一个简单高效的对称流密码,可以用来加密文本和图片。它的初始密钥长度可以不固定,加密和解密的过程是一样的,也就是对密文在调用一次加密算法就可以得到明文。
二、MATLAB代码
1.密钥初始化
代码如下:
function s = KSA(key)
%rc4的密钥初始化函数
[keylen, n] = size(key);
s = zeros(1,256);
for i=1:256
s(i)=i;
end
j=1;
for i=1:256
j=mod(j+s(i)+key(i),256);
if j==0
j=256;
end
temp=s(i);
s(i)=s(j);
s(j)=temp;
end
2.加(解)密算法
代码如下:
function result = RC4_img(Img,key)
%对图像进行加解密
%Lmg为带价密的图像,key为密钥
[height,weight] = size(Img);
result = zeros(height,weight);
i=1;
for row=1:height
for col=1:weight
i=mod(i,256);
if i==0
i=256;
end
result(row,col) =bitxor(Img(row,col),key(i));
i=i+1;
end
end
result = uint8(result);
3.使用实例
这里面的key读取了存储在keytxt中的固定密钥,里面可以是数字也可以是字符,长度也没有限制,但是超过256位之后是不会用到的。应该自己在本地添加一个keytxt文件,和你的Matlab文件放在一个文件夹中就行。
代码如下:
clc;clear all;
img = imread('lena.bmp');
I = rgb2gray(img); % 灰度化
key = textread('keytxt');
s = KSA(key);
s=uint8(s);
RC4Img = RC4_img(I,s);
ReRC4Img =RC4_img(RC4Img,s);
figure
subplot(2,2,1);imshow(I);title('original image');
subplot(2,2,2);imshow(RC4Img);title('after RC4');
subplot(2,2,3);imshow(ReRC4Img);title('restore RC4');
展示加密与恢复效果
总结
以上就是今天要讲的内容,本文只是RC4的一种简单实现,学海无涯,代码为伴,继续加油。