原标题:RC4无损加密和解密图片
原文来自:CSDN 原文链接:https://blog.csdn.net/m0_37772174/article/details/103038607
前言
  RC4加密算法的特点在于其简单易用且十分高校,一个简单的异或运算就能够对文本进行加密。而且RC4的加密算法是对称的,即原图经过一次RC4操作即得到加密图片,加密图片经过一次RC4操作,即得到解密图片。
代码
# -*- coding: utf-8 -*-
'''
date:2019/11/2
功能:主要用于RC4的加密和解密
算法介绍:RC4是经典的对称加密算法
即RC4(原文+密钥)=密文
RC4(密文+密钥)=原文
'''
import numpy as np
import cv2
MOD=256
#密钥填充至256位
def KSA(key):
keylen = len(key)
# create the array S
S = list(range(MOD))
i = 0
j = 0
for i in range(MOD):
j = (j+S[i]+key[i % keylen]) % MOD
S[i],S[j] = S[j],S[i]
return S
class RC4:
def __init__(self,_key =np.random.randint(0,255,(256))):
self.key = KSA(_key)
#使用RC4_img加密图片
def RC4_img(self,filepath):
frame = cv2.imread(filepath)
height = frame.shape[0]
weight = frame.shape[1]
channels = frame.shape[2]
i = 0
for row in range(height): #遍历高
for col in range(weight): #遍历宽
for c in range(channels): #便利通道
frame[row, col, c] =frame[row, col, c] ^ self.key[i%MOD]
i+=1
return frame
def RC4(self,data):
new_data = []
for i in range(data):
_ = data[i]^self.key[i%MOD]
new_data.append(_)
return new_data
#记录下当前的密钥
def write_key(self,filepath="./keytxt"):
file = open(filepath,'w')
for i in range(len(self.key)):
file.write(str(self.key[i]))
file.write('n')
file.close()
#读取密钥
def read_key(self,filepath="./keytxt"):
file = open(filepath,'r')
_key = []
for line in file:
_key.append(int(line))
self.key = KSA(_key)
if __name__=="__main__":
enimg = RC4()
enimg.write_key()
frame = enimg.RC4_img("./liuyifei.bmp")
cv2.imwrite("myRC4en.bmp",frame)
frame = enimg.RC4_img("myRC4en.bmp")
cv2.imwrite("myRC4de.bmp",frame)
加密前
加密后
解密后
免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。
合作及投稿邮箱:E-mail:editor@tusaishared.com