资源经验分享RC4无损加密和解密图片

RC4无损加密和解密图片

2019-11-14 | |  107 |   0

原标题: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)

加密前
20191112210433627.jpg
加密后
20191112210607513.bmp
解密后
20191112210433627.jpg

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:SVO 中的深度滤波的推导

下一篇:PyCharm的定位及鼠标操作

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...