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

百度图片

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux启动ftp命令_linux安装ftp命令

    linux启动ftp命令_linux安装ftp命令ftp服务器在网上较为常见,Linuxftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件下面由学习啦小编为大家整理了linux下开启ftp命令的相关知识,希望对大家有所帮助!linux下启动FTP命令的方式一般linux都有vsftpd吧,启动命令是servicevsftpdstart,你要限制匿名登录的话,修改它的配置文件/etc/vsftpd/vsftpd.conf,把an…

    2022年9月21日
    3
  • webstorm激活码2021[最新免费获取]

    (webstorm激活码2021)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月29日
    129
  • linux杀死进程详解「建议收藏」

    linux杀死进程详解「建议收藏」1.kill作用:根据进程号杀死进程用法:kill[信号代码]进程ID举例:[root@localhost~]#psauxf|grephttpd注意:kill-9来强制终止退出举例[root@localhost~]#psaux|grepgaim或

    2022年9月29日
    6
  • linux移植ntpdate「建议收藏」

    linux移植ntpdate「建议收藏」今天想让板子在开机的时候自动去同步网络上的时间,网上查了一下,需要使用到ntpdate命令。但是我使用的文件系统(busybox制作的文件系统)没有该命令,所以移植了一下。由于移植ntpdate需要用到openssl的头文件和库,所以也移植了openssl。PC系统:UbuntuUbuntu12.04.4LTS1.创建工作目录1mkdirc

    2022年9月24日
    2
  • mysql mediumtext 最大_mysql – TINYTEXT,TEXT,MEDIUMTEXT和LONGTEXT最大存储大小

    mysql mediumtext 最大_mysql – TINYTEXT,TEXT,MEDIUMTEXT和LONGTEXT最大存储大小上升到@Ankan-Zerob的挑战,这是我对每个文本类型中可以存储的最大长度的估计:Type|Bytes|Englishwords|Multi-bytewords———–+—————+—————+—————–TINYTEXT|255|±44…

    2022年6月7日
    438
  • 请用决策树_cart决策树使用什么来选择划分属性

    请用决策树_cart决策树使用什么来选择划分属性CART,又名分类回归树,是在ID3的基础上进行优化的决策树,学习CART记住以下几个关键点:(1)CART既能是分类树,又能是分类树;(2)当CART是分类树时,采用GINI值作为节点分裂的依据;当

    2022年8月1日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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