照片元信息

我们平时拍摄的图片,不仅包含了可见的像素信息,还包含了我们看不到的隐藏信息(元信息),而这些元信息,往往会不经意间泄露我们的隐私.


我们先来看看平时我们拍摄的照片里面,到底藏了哪些信息;

(1) iPhone6s照片元信息的提取:

iPhone6s

运行脚本

#####手机拍摄的照片,元信息非常丰富,包含了光圈/快门等拍摄参数,也包含了拍摄时间,拍摄地点等个人隐私信息,所以不要轻易将未经处理的原图发送给他人,尤其不要随意上传原图!

(2) 佳能70D拍摄照片元信息的提取:

佳能70D

运行脚本

#####相机拍摄的图片与手机类似,同样包含了地理信息,拍摄时间信息; #####相机拍摄的图片,摄影师一般会使用软件进行后期处理,为了保护隐私,图片在导出时记得勾选消除元信息的选项(下图为Adobe Lightroom的导出示例)

Lightroom消除元信息

不只是我们平常拍的照片,网站图片的也可能存在安全隐患;

#####黑客通过爬虫批量下载网站图片,然后分析网站图片的元数据,从中获取有价值的信息,有的网站对于用户上传的图片处理的很好,有的网站做的就不够理想... ###(3) 高校网站:

高校的官网大多年久失修,底层框架陈旧,网站安全性不是很好,高校网站的图片,一般没有进行过专业的后期处理,几乎是拍完即用,有很多安全隐患,以我从学校官网下载的新闻图片为例:

仅从图片的命名就可以确定拍摄的时间; 通过读取图片的元信息可以了解到,相机型号: 佳能750D; 拍摄时间:2017年6月23日下午4点15分16秒; 最应该消除的GPS信息被保留了下来...

不讲了...高校的网站安全建设有待提高...

学校

运行脚本

###(4) 政府官网图片元信息:

下面这张图片是从政府官网找到的,与高校官网的图片相比,图片命名看不到有价值的信息,通过读取元信息,能了解到: 相机型号:Canon EOS-1D X Mark II, 拍摄时间:2017年9月13日下午3点48分13秒拍摄...

与高校相比,政府官网的图片信息相对安全

官网

运行脚本

(5)简书网站的图片

简书

运行脚本

简书网站的图片找不到任何图片元信息的,大家可以放心上传!不只是简书,微博,微信,qq等主流的社交平台,为了减少服务器存储图片的开销,会主动帮用户主动消除元信息,只要你不往平台上传原图,就基本可以保证信息的安全!

##我想消除图片隐藏的信息,怎么办? ####这里提供一个python脚本,将脚本和图片放到一起,然后运行脚本即可:

python脚本

GIF演示中, 009是为了前后对比,验证清除的效果,其实只需运行010即可!

####批量消除图片元信息的脚本(010删除Exif.py)


import piexif
import sys
import os
import re

def remove_all_exif(image_names):
    for image_name in image_names:
        try:
            piexif.remove(image_name)
            print(image_name,"exif信息清除完毕")
        except Exception:
            pass


def get_images():
    all_file_names = os.listdir()
    image_names = list()
    for file_name in all_file_names:
        if re.match(r".*\.(jpg|JPG|png)",file_name):
            image_names.append(file_name)
            print("已经将",file_name,"添加到列表!")
        else:
            pass
    return image_names


def main():
    image_names = get_images()
    remove_all_exif(image_names)
    
    pass


if __name__ == "__main__":
    main()



批量获取图片元信息的脚本(009提取Exif.py)

import os
import sys
import re
import PIL

from PIL import Image
from PIL.ExifTags import TAGS

def get_Exif(image_names):
    for image_name in image_names:
        print("开始读取",image_name)
        exifData = dict()
        imgFile = Image.open(image_name)
        try:
            info = imgFile._getexif()
            if info:
                print(image_name,"的信息为:")
                for (key, value) in info.items():
                    nice=TAGS.get(key, key)
                    print("%s(%s) = %s"%(nice, key, value))
                    if nice == "GPSInfo":
                        print("---%s(%s) = %s---"%(nice,key,value))
                    elif re.match(r"^Date.*", nice):
                        print("%s(%s) = %s"%(nice, key, value))
                    else:
                        pass
            else:
                print("没有任何元信息!")
                    
        except Exception as e:
            print(e)

def get_images():
    all_file_names = os.listdir()
    image_names = list()
    for file_name in all_file_names:
        if re.match(r".*\.(jpg|JPG|png|jpeg)",file_name):
            image_names.append(file_name)
        else:
            pass
    return image_names

def main():
    image_names = get_images()
    get_Exif(image_names)
    

    pass

if __name__ == "__main__":
    main()

书籍推荐