python简单的图片加密

欢迎加入我们卧虎藏龙的python讨论qq群:729683466

导 语 ●

总有些东西是你不希望别人看到的

比如

你暗恋的女神的照片

要是被别人发现了

那可就尴尬了

所以

来学一学用python加密图片吧!

代码及相关资源获取

1:关注“python趣味爱好者”公众号,回复“加密图片 ”获取源代码

  

效果演示

加密前:

加密后:

往期精选

python凯撒加密图片

 ????

开发工具

python3.6.4,第三方库:PIL

讲解部分

一:凯撒加密

很久以前公众号就发过一篇关于关于python凯撒加密的推文,原理就是凯撒加密,将图片中的每一个像素点按照规律向后移动,这样就可以打破原始的像素点排布规律。就可以让图片变形,如果要解密,就将像素点向前移动。

但根据群里朋友的反映,那个代码加密的效果不太好,也就是说,加密以后的图片还是依稀看的出来轮廓,

下面是以前的加密方法的加密效果:

加密后还是能够辨认出来,这不像是加密,倒像是在原有的照片上行加了一层帷幕。

如果用这个算法去加密你女神的照片,那可就太丢脸了。

二:字典加密解密原理

然后我自创了一个用于图片的加密方法,还没有想好名字,在这里就叫字典加密吧!

原理就非常简单啦!像素点是0--255之间的整数。如果将像素点用一个映射关系处理一下,就可以让像素点得排列完全混乱,比如说,让图片中像素点12对应51.那么图片中所有的值为12的像素点酒全部是51。如果要解密图片,就将加密后的图片中的像素点全部提取出来,然后将其中的51全部变成12,这样就变成了原来的图片。

其实就是用一个字典对应起来。

三:生成密码本

首先要做的就是这样的一个“密码本”,也就是一个字典,将0--255之间所有的数全部对应0-255中的另外一组数字,也就是data对应code。data相当于字典的key,code相当于字典的value。其中不能有重复的值存在,否则字典密码本就不是一一对应的关系了。

如何生成这样一个密码本。只需要用到下面的随机数生成代码:

import random
import numpy as np
after={}
solve_code={}
data=[]
for i in range(0,256):
    data.append(i)
for i in range(0,256):
    k=random.sample(data, 1)
    solve_code[k[0]]=i
   
    after[i]=k[0]
    data.remove(k[0])


print(solve_code)
np.save("code.npy",after)
np.save("solve_code.npy",solve_code)

用生成随机数的方法,让0-255之间的数随机对应到0-255之间的其他数,然后存储成npy的加密本和解密本。实际上就是字典。然后把这些字典存储起来,就是一直可以用的密码本了!

四:真实图片加密

如何对下面的图片进行加密。

首先是讲图片读取成矩阵,用到的是python的图片处理库函数,也就是PIL,

from PIL import Image
im = Image.open('./test3.jpeg')
im2 = np.array(im)

用上面的三行代码就可以讲图片转化为numpy格式的矩阵,然后用三层for循环讲矩阵里的数字按照生成的密码加密,用映射关系一一对应。

for i in range(0,size1[0]):
    for j in range(0,size1[1]):
        for k in range(0,size1[2]):


            new_array[i, j, k] =code[im2[i,j,k]]

最后将加密后的矩阵转化为图片,然后存储起来,这样就完成了图片的加密。加密效果如图

im3=Image.fromarray(np.uint8(new_array))
im3.show()
im3.save('flag.jpg')

完整地加密代码如下。解密代码只需要把密码本换成解密的字典即可。

import numpy as np
from PIL import Image
im = Image.open('./test3.jpeg')
im2 = np.array(im)


size1=im2.shape
print(size1)
code=np.load('code.npy',allow_pickle=True).item()
slove_code=np.load('solve_code.npy',allow_pickle=True).item()
#加密图片
print(code)




new_array=np.zeros(size1)
k1=0
print("进入循环")
for i in range(0,size1[0]):
    for j in range(0,size1[1]):
        for k in range(0,size1[2]):


            new_array[i, j, k] =code[im2[i,j,k]]




#显示图片,保存图片
im3=Image.fromarray(np.uint8(new_array))
im3.show()
im3.save('flag.jpg')


作者|齐

编辑|齐

感谢大家观看

有钱的老板可打赏一下小编哦

扫描二维码

关注我们

QQ群:729683466

◰  

参考来源

图片来源:pexels

百度图片

  • 12
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: Python可以使用第三方库Pillow来对图片进行加密。下面是一个使用Pillow库进行图片加密的示例代码: ```python from PIL import Image def encrypt_image(filename, output_filename, key): image = Image.open(filename) # 打开原图片 encrypted_image = image.copy() # 创建加密后的图片副本 width, height = image.size pixel_values = list(image.getdata()) # 获取原图片的像素值列表 # 使用密钥对像素值进行加密 for i in range(len(pixel_values)): r, g, b = pixel_values[i] # 获取像素点的RGB值 # 对RGB值进行异或运算,使用密钥的字符对应ASCII码的最低7位作为密钥 r ^= ord(key[i % len(key)]) & 0x7F g ^= ord(key[i % len(key)]) & 0x7F b ^= ord(key[i % len(key)]) & 0x7F # 把加密后的像素值保存到加密后的图片副本中 encrypted_image.putpixel((i % width, i // width), (r, g, b)) encrypted_image.save(output_filename) # 保存加密后的图片 # 测试 filename = "original_image.png" # 原图片文件名 output_filename = "encrypted_image.png" # 加密后的图片文件名 key = "encryption_key" # 密钥 encrypt_image(filename, output_filename, key) ``` 以上代码中,首先使用`Image.open()`函数打开原图片,然后创建一个与原图片一样的副本。通过`image.getdata()`获取原图片的像素值列表,然后根据给定的密钥对每个像素的RGB值进行异或运算来进行加密。最后,使用`encrypted_image.save()`函数保存加密后的图片副本。 这样,通过运行以上代码,可以将指定的原图片加密后保存为新的文件,加密后的图像只有通过相同的密钥才能解密还原为原图像,起到了加密保护的作用。 ### 回答2: Python可以使用多种方法对图片进行加密。以下是其中一种方法: 1. 使用Python的图像处理库(例如PIL或OpenCV)打开要加密图片文件。 2. 将图片转换为像素数组。每个像素包含红、绿、蓝(RGB)三个通道的值。 3. 对每个像素的RGB值进行加密处理。可以使用对称加密算法(如AES)或自定义的加密算法。加密算法可以根据个人需求进行编写。 4. 将加密后的RGB值重新写回像素数组。 5. 将加密后的像素数组转换回图像。 6. 保存加密后的图像文件。 以下是一个简单加密图像的例子: ```python from PIL import Image import random def encrypt_image(image_path, key): # 打开图像文件 image = Image.open(image_path) # 获得图像的像素数组 pixels = image.load() # 获取图像的宽度和高度 width, height = image.size # 使用随机数生成器作为加密算法的密钥 random.seed(key) # 遍历图像的每个像素 for i in range(width): for j in range(height): # 获取像素的RGB值 r, g, b = pixels[i, j] # 生成随机数并与像素的RGB值进行异或运算 r = r ^ random.randint(0, 255) g = g ^ random.randint(0, 255) b = b ^ random.randint(0, 255) # 将加密后的RGB值写回像素 pixels[i, j] = (r, g, b) # 保存加密后的图像文件 encrypted_image_path = "encrypted_image.png" image.save(encrypted_image_path) return encrypted_image_path # 示例用法 encrypted_image = encrypt_image("original_image.png", "my_secret_key") print("加密后的图像已保存为:", encrypted_image) ``` 这只是一个简单的示例,实际中可以使用更复杂的加密算法和更强的密钥来提高安全性。 ### 回答3: Python可以使用多种方式对图片进行加密,以下是其中一种常见的方法: 1. 导入必要的库:首先导入PIL库,它是Python中处理图像的常用库。 ```python from PIL import Image ``` 2. 加载图片:使用PIL库中的`open()`函数加载要加密图片。 ```python image = Image.open('要加密图片路径') ``` 3. 加密过程:加密可以采用多种方式,一个简单加密方法是将像素值与某个偏移量进行异或操作。下面是一个例子,假设我们将每个像素的红色通道与偏移量进行异或操作。 ```python # 获取图片的宽度和高度 width, height = image.size # 循环遍历每个像素点 for x in range(width): for y in range(height): # 获取像素点的RGB值 r, g, b = image.getpixel((x, y)) # 进行加密操作 # 假设偏移量为10 r ^= 10 # 将加密后的像素值重新设置回去 image.putpixel((x, y), (r, g, b)) ``` 4. 保存加密后的图片:使用PIL库的`save()`函数保存加密后的图片。 ```python image.save('加密后的图片路径') ``` 以上就是使用Python图片进行加密简单示例。需要注意的是,加密算法的选择取决于具体的安全需求,更强大的加密算法需要使用更复杂的库和方法。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值