python简单的图片加密「建议收藏」

python简单的图片加密「建议收藏」欢迎加入我们卧虎藏龙的python讨论qq群:729683466●导语●总有些东西是你不希望别人看到的比如你暗恋的女神的照片要是被别人发现了那可就尴尬了所以来学一学用python加密图…

大家好,又见面了,我是你们的朋友全栈君。

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

导 语 ●

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

比如

你暗恋的女神的照片

要是被别人发现了

那可就尴尬了

所以

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

代码及相关资源获取

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

  

效果演示

加密前:

python简单的图片加密「建议收藏」

加密后:

python简单的图片加密「建议收藏」

python简单的图片加密「建议收藏」

往期精选

python凯撒加密图片

 ????

开发工具

python3.6.4,第三方库:PIL

讲解部分

一:凯撒加密

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

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

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

python简单的图片加密「建议收藏」

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

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

二:字典加密解密原理

然后我自创了一个用于图片的加密方法,还没有想好名字,在这里就叫字典加密吧!python简单的图片加密「建议收藏」python简单的图片加密「建议收藏」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简单的图片加密「建议收藏」

首先是讲图片读取成矩阵,用到的是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]]

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

python简单的图片加密「建议收藏」

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

百度图片

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151967.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)
blank

相关推荐

  • 安卓服务(Service)的两种开启方式以及服务的生命周期

    安卓服务(Service)的两种开启方式以及服务的生命周期

  • Restsharp_handler.post

    Restsharp_handler.post1.加入依赖RestSharpNewtonsoft.Json2.编写json、form-data请求代码usingMicrosoft.AspNetCore.Mvc;usingNewtonsoft.Json;usingNewtonsoft.Json.Linq;usingRestSharp;usingRestTemplate.model;namespaceRestTemplate.Controllers{[Route(“api/[controller]”)]

  • 华三路由交换配置命令_H3C路由器常用基本配置命令「建议收藏」

    华三路由交换配置命令_H3C路由器常用基本配置命令「建议收藏」H3C路由器常用基本配置命令[Quidway]sysnamerouter_name命名路由器(或交换机)[Quidway]delete删除FlashROM中的配置[Quidway]save将配置写入FlashROM[Quidway]interfaceserial0进入接口配置模式[Quidway]quit退出接口模式到系统视图[Quidway]shutdown/undoshutdown…

    2022年10月17日
  • 论物联网与大数据、云计算、工业物联网、区块链「建议收藏」

    论物联网与大数据、云计算、工业物联网、区块链「建议收藏」论物联网与大数据、云计算、工业物联网、区块链我们当今的时代飞速发展,物联网、大数据、云计算这些名词在我们的生活中出现的越来越频繁,看似高大上的三者其实却和我们的生活息息相关。本篇文章就物联网、大数据以及云计算对三者之间的关系以及应用进行描述。工业物联网和区块链也进行了介绍。(一)物联网(1)什么是物联网物联网(InternetofThings,简称IoT)是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术,实时采集任何需要监控、连接、互动的物体或过程,采

  • 在javascript中实现freameset 框架页面的跳转

    在javascript中实现freameset 框架页面的跳转对于框架的跳转可以为: 1:window.parent.frames[“需要修改的框架”].location.href(“跳转的路径”); 2:window.parent.frames.item(框架在框架集数组中存放的位置).location.href(“跳转的路径”); 3:window.parent.frames.item(“需要修改的框架此为框架名称”).location.h

  • MySQL Binlog 介绍[通俗易懂]

    MySQL Binlog 介绍[通俗易懂]Binlog简介MySQL中一般有以下几种日志:日志类型写入日志的信息错误日志记录在启动,运行或停止mysqld时遇到的问题通用查询日志记录建立的客户端连接和执行的语句二进制日志记录更改数据的语句中继日志从复制主服务器接收的数据更改慢查询日志记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询DDL日…

    2022年10月24日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号