数字水印:构建坚不可摧的文件安全防线附python代码

数字水印:构建坚不可摧的文件安全防线
 
在信息飞速传播的当下,数据安全尤其是文件防泄密问题,已成为个人、企业乃至国家不容忽视的重要挑战。随着数字化办公的普及,文件在不同平台和人员间频繁流转,如何确保文件在分享过程中的安全性,成为了亟待解决的难题。
 
为有效应对这一挑战,我们研发了一套创新的加密解密系统,其核心在于利用隐藏式数字水印技术,为每一份文件打造独一无二的“身份标识”,全方位守护文件安全,让泄密行为无所遁形。
 
一、加密:隐藏在数字背后的安全护盾
 
在分享图片或其他文件前,只需简单操作,我们的系统便会对文件中的文本信息进行加密处理。通过先进的加密算法,将文本转化为一串看似无规律的数字代码,这串代码如同细密的密码锁,牢牢锁住文件的核心内容。
 
更为关键的是,在加密过程中,系统会巧妙地将这些加密后的数字信息以水印的形式,无痕嵌入到图片之中。这种隐藏式数字水印并非传统意义上可见的水印图案,它不会对图片的视觉效果、画质清晰度产生任何影响,肉眼无法察觉,却蕴含着关于文件来源和所有者的关键信息,如同为文件穿上了一层隐形的“安全铠甲”。
 
二、传播:无惧流转,安全如影随形
 
当携带数字水印的文件被发送给个人后,无论其在何种渠道传播,哪怕被上传至广阔无垠的网络世界,我们的安全防护网依然紧密覆盖。每一次文件的流转,数字水印都如同忠诚的卫士,默默跟随,记录着文件的行踪。
 
网络的开放性使得文件面临诸多风险,但数字水印技术的存在,让我们对文件的掌控力丝毫不减。即便文件在网络中被肆意转载、传播,其隐藏的数字水印始终保持不变,如同文件的“DNA”,独一无二且不可篡改。
 
三、解密:精准定位,让泄密者无处藏身
 
一旦发生文件泄密事件,我们的系统便会迅速启动追踪机制。通过专业的图像比对和解密工具,对网络上流传的疑似泄密图片进行扫描分析。系统能够精准识别图片中隐藏的数字水印,并快速解密其中蕴含的信息。
 
这些信息如同指向泄密源头的“导航坐标”,清晰地揭示文件最初的发送对象、发送时间等关键线索。借助这些线索,我们可以迅速锁定泄密者,无论其身处何地,都难以逃脱责任的追溯。这种精准的定位能力,不仅为及时采取措施遏制泄密影响提供了有力支持,更对潜在的泄密行为形成了强大威慑。
 
四、总结:筑牢文件安全防线,开启无忧分享时代
 
我们的加密解密系统,融合先进的加密技术与创新的数字水印理念,为文件安全保驾护航。从加密时的隐形守护,到传播中的全程跟踪,再到解密后的精准溯源,每一个环节紧密相扣,构建起一道坚不可摧的文件安全防线。
 
无论你是个人用户,希望保护珍贵照片、重要文档的隐私;还是企业机构,致力于防止商业机密、核心数据的泄露,这套系统都将成为你的得力助手。让我们携手共进,利用数字水印技术,告别文件泄密的担忧,开启安全无忧的文件分享新时代。

加密代码:

import cv2
import numpy as np
from tkinter import filedialog, messagebox
import tkinter as tk

# LSB加密:在每个像素的最低两位中嵌入水印文本
def embed_watermark(image_path, watermark_text, output_path):
    try:
        # 读取原图像
        img = cv2.imread(image_path)
        if img is None:
            raise ValueError("Failed to load image. Please check the image format and path.")

        # 将水印文本转换为二进制字符串
        binary_watermark = ''.join(format(ord(c), '08b') for c in watermark_text)
        watermark_len = len(binary_watermark)

        # 获取图像的宽度和高度
        h, w, _ = img.shape

        # 将水印信息嵌入到整个图像的每个像素的最低两位
        index = 0
        for i in range(h):
            for j in range(w):
                pixel = list(img[i, j])

                # 遍历BGR通道
                for k in range(3):
                    if index < len(binary_watermark):  # 如果还有二进制水印数据
                        # 将水印信息嵌入到最后两位
                        pixel[k] = pixel[k] & 0xFC | int(binary_watermark[index], 2)  # 设置最后两位
                        index += 1
                    else:
                        # 如果水印数据已经用完,重新开始
                        index = 0
                        pixel[k] = pixel[k] & 0xFC | int(binary_watermark[index], 2)
                        index += 1

                # 更新像素
                img[i, j] = tuple(pixel)

        # 保存加密后的图片
        cv2.imwrite(output_path, img)
        return True
    except Exception as e:
        print(f"Error embedding watermark: {e}")
        return False

# GUI 界面(加密)
def watermark_embed_gui():
    def select_image():
        filepath = filedialog.askopenfilename(filetypes=[("Image files", "*.png;*.jpg;*.jpeg")])
        if filepath:
            entry_image_path.delete(0, tk.END)
            entry_image_path.insert(0, filepath)

    def save_image():
        filepath = filedialog.asksaveasfilename(defaultextension=".png", filetypes=[("Image files", "*.png")])
        if filepath:
            entry_output_path.delete(0, tk.END)
            entry_output_path.insert(0, filepath)

    def embed_action():
        image_path = entry_image_path.get()
        watermark_text = entry_watermark.get()
        output_path = entry_output_path.get()

        if not (image_path and watermark_text and output_path):
            messagebox.showerror("Error", "Please fill all fields.")
            return

        if embed_watermark(image_path, watermark_text, output_path):
            messagebox.showinfo("Success", "Watermark embedded successfully!")
        else:
            messagebox.showerror("Error", "Failed to embed watermark.")

    # 创建 Tkinter 窗口
    window = tk.Tk()
    window.title("Watermark Embedder")

    tk.Label(window, text="Select Image:").grid(row=0, column=0, padx=10, pady=10)
    entry_image_path = tk.Entry(window, width=40)
    entry_image_path.grid(row=0, column=1, padx=10, pady=10)
    tk.Button(window, text="Browse", command=select_image).grid(row=0, column=2, padx=10, pady=10)

    tk.Label(window, text="Watermark Text:").grid(row=1, column=0, padx=10, pady=10)
    entry_watermark = tk.Entry(window, width=40)
    entry_watermark.grid(row=1, column=1, padx=10, pady=10)

    tk.Label(window, text="Save To:").grid(row=2, column=0, padx=10, pady=10)
    entry_output_path = tk.Entry(window, width=40)
    entry_output_path.grid(row=2, column=1, padx=10, pady=10)
    tk.Button(window, text="Save", command=save_image).grid(row=2, column=2, padx=10, pady=10)

    tk.Button(window, text="Embed Watermark", command=embed_action).grid(row=3, column=1, pady=20)
    window.mainloop()

if __name__ == "__main__":
    watermark_embed_gui()

解密:

import cv2
import numpy as np
from tkinter import filedialog, messagebox
import tkinter as tk

# 提取LSB水印
def extract_watermark(image_path, watermark_len=80):
    try:
        # 读取图像
        img = cv2.imread(image_path)
        if img is None:
            raise ValueError("Failed to load image. Please check the image format and path.")

        # 获取图像的宽度和高度
        h, w, _ = img.shape

        # 提取水印的二进制字符串
        binary_watermark = ''
        for i in range(h):
            for j in range(w):
                pixel = img[i, j]
                # 提取每个通道的最低两位
                for k in range(3):
                    binary_watermark += str(pixel[k] & 0x03)  # 获取最低两位

        # 截取前watermark_len位并转换为字符
        binary_watermark = binary_watermark[:watermark_len * 8]
        watermark_text = ''.join(chr(int(binary_watermark[i:i + 8], 2)) for i in range(0, len(binary_watermark), 8))

        return watermark_text
    except Exception as e:
        print(f"Error extracting watermark: {e}")
        return None

# GUI 界面(解密)
def watermark_extract_gui():
    def select_image():
        filepath = filedialog.askopenfilename(filetypes=[("Image files", "*.png;*.jpg;*.jpeg")])
        if filepath:
            entry_image_path.delete(0, tk.END)
            entry_image_path.insert(0, filepath)

    def extract_action():
        image_path = entry_image_path.get()

        if not image_path:
            messagebox.showerror("Error", "Please select an image.")
            return

        watermark_text = extract_watermark(image_path)
        if watermark_text is not None:
            messagebox.showinfo("Watermark Extracted", f"Extracted watermark: {watermark_text}")
        else:
            messagebox.showerror("Error", "Failed to extract watermark.")

    # 创建 Tkinter 窗口
    window = tk.Tk()
    window.title("Watermark Extractor")

    tk.Label(window, text="Select Image:").grid(row=0, column=0, padx=10, pady=10)
    entry_image_path = tk.Entry(window, width=40)
    entry_image_path.grid(row=0, column=1, padx=10, pady=10)
    tk.Button(window, text="Browse", command=select_image).grid(row=0, column=2, padx=10, pady=10)

    tk.Button(window, text="Extract Watermark", command=extract_action).grid(row=1, column=1, pady=20)
    window.mainloop()

if __name__ == "__main__":
    watermark_extract_gui()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

babyai997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值