数字图像加密关键技术的研究与实现(Python)

目 录
摘 要 I
Abstract II
第1章 绪论 1
1.1研究背景及意义 1
1.1.1研究背景 1
1.1.2研究意义 1
1.2国内外相关研究现状及发展趋势 2
1.2.1国内相关研究现状 2
1.2.2国外相关研究现状 3
1.2.3发展趋势 3
1.3论文研究内容 4
第2章 DES算法原理 6
2.1 DES简介 6
2.2 DES的加密解密 6
2.3 DES工作原理 7
2.4 DES解密原理 8
2.5三重DES 9
第3章 基于3DES的图片加密程序具体实现 11
3.1图片数据的处理及分组处理 11
3.1.1读入图片的二进制流 11
3.1.2字符串转二进制bit 11
3.1.3 des填充及分组 12
3.2 组内加密 13
3.2.1 密钥拆分 14
3.2.2 DES初始化 15
3.2.3 密钥置换 15
3.2.4 ip盒置换 18
3.2.5 E扩展置换 19
3.2.6 S盒代替 20
3.2.7 P盒运算 21
3.2.8 IP逆置换 21
3.3 CBC分组运行模式 22
3.3.1 数据的预处理 22
3.3.2 CBC代码 23
3.3 密文图像显示 24
3.4 密文图像解密 26
3.4.1 CBC分组组合阶段 26
3.4.2 子密钥运算阶段 26
3.5 主函数编写 27
第4章 基于3DES的图片加密程序测试 30
4.1实验数据 30
4.2问题处理 32
第5章 总结与展望 33
5.1 总结 33
5.2 展望 33
参考文献 35
致 谢 37
1.3论文研究内容
本文主要研究了数字图像加密技术的关键技术,并实现了基于DES算法的数字图像加密方案。具体来说,本文的内容包括以下几个方面:
数字图像加密技术的研究现状和发展趋势:本文首先介绍了数字图像加密技术的研究背景和意义,探讨了数字图像加密技术的发展现状和未来趋势,为后续的研究提供了理论依据和参考。
DES算法的原理和实现:本文详细阐述了DES算法的原理和实现过程,包括密钥生成、加密和解密过程。通过对DES算法的分析和研究,为后续的数字图像加密方案的设计提供了基础和参考。
基于DES算法的数字图像加密方案的设计与实现:本文提出了一种基于DES算法的数字图像加密方案,并使用Python编程实现了该方案。该方案包括图像的预处理、密钥的生成、加密和解密过程等,能够有效地保护数字图像的安全性和隐私性。
实验验证和性能评估:本文通过实验验证了基于DES算法的数字图像加密方案的可行性和有效性,比较和其他图像加密方案的性能和安全性。实验结果表明,该方案具有较高的安全性和可靠性,能够有效地保护数字图像的安全性和隐私性。
结论和展望:本文总结了研究内容和成果,指出了研究的不足之处,并对未来研究方向进行了展望。通过对数字图像加密技术的研究和分析,为数字图像的安全保护提供新的思路和方法,同时也为信息安全领域的发展和创新做出了一定的贡献。
总的来说,本文主要研究了数字图像加密技术的关键技术,实现了基于DES算法的数字图像加密方案,并对该方案进行了实验验证和性能评估。这些研究内容和成果将有助于更好地保护数字图像的安全性和隐私性,促进信息安全领域的发展和创新。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


"""Tool to transform any binary file to a PNG image.

If only a file is given, an image file named <file name>.png will be generated
in the same directory as the file.

If the only argument is a directory, all the files in this directory will be
transformed in a directory named <directory name>_images alongside the given
input directory.

Behavior with two arguments is similar but with user determined output path.
"""


import argparse
import math
import os
import sys

# pip install Pillow
from PIL import (
    Image,
    ImageDraw,
)


class FileData:
    def __init__(self, infile, outfile):
        self.infile = infile
        self.outfile = outfile


def determine_size(data):
    size = int(math.sqrt(len(data)) + 1)
    return size, size


def calccolor(byteval):
    return (
        ((byteval & 0o300) >> 6) * 64,
        ((byteval & 0o070) >> 3) * 32,
        (byteval & 0o007) * 32,
    )


def calcgrayshade(byteval):
    return byteval, byteval, byteval


def bin2img(data, isgrey):
    colorfunc = calcgrayshade if isgrey else calccolor
    xsize, ysize = size = determine_size(data)
    img = Image.new("RGB", size, color=(255, 255, 255, 0))
    draw = ImageDraw.Draw(img)
    try:
        i = 0
        for y in range(ysize):
            for x in range(xsize):
                draw.point((x, y), fill=colorfunc(data[i]))
                i += 1
    except IndexError:
        pass
    return img


def error(msg):
    print(msg, file=sys.stderr)
    sys.exit(1)


def build_dirpaths(indir, outdir):
    file_inputs = [
        os.path.join(indir, file)
        for file in os.listdir(indir)
        if os.path.isfile(os.path.join(indir, file))
    ]
    if not file_inputs:
        error(f'Given directory "{indir}" must contain files')
    os.makedirs(outdir, exist_ok=True)
    files = [
        FileData(file, os.path.join(outdir, f"{os.path.basename(file)}.png"))
        for file in file_inputs
    ]
    return files


def parse_cmdargs():
    parser = argparse.ArgumentParser(
        description=__doc__,
        usage="Type %(prog)s [--help] [--grey] input [output]")
    #parser.add_argument("input", help="Input file or directory")
    parser.add_argument("output", nargs="?", help="Output file or directory")
    parser.add_argument(
        "-g",
        "--grey",
        action="store_true",
        dest="isgrey",
        help="Generate images in shades of grey instead of using colors")
    args = parser.parse_args()

    input = 'Encrypted'
    output = ''
    if output:
        if os.path.exists(output):
            if os.path.isdir(input) and not os.path.isdir(output):
                error(f'Input "{input}" is a directory but not output "{output}"')
            elif os.path.isfile(input) and not os.path.isfile(output):
                error(f'Input "{input}" is a file but not output "{output}"')

        if os.path.isdir(input):
            files = build_dirpaths(input, output)
        else:
            files = [FileData(input, output)]
    elif os.path.isdir(input):
        if input[-1] in ("/", "\\"):
            input = input[:-1]
        outdir = os.path.join(
            os.path.dirname(input),
            f"{os.path.basename(input)}_images")
        files = build_dirpaths(input, outdir)
    else:
        outfile = os.path.join(
            os.path.dirname(input),
            f"{os.path.basename(input)}.png")
        files = [FileData(input, outfile)]

    return files, ''


def generate_image(infile, isgrey):
    with open(infile, "rb") as f:
        data = f.read()
    return bin2img(data, isgrey)


def it():
    try:
        files, isgrey = parse_cmdargs()
        for file in files:
            infile = file.infile
            outfile = file.outfile

            img = generate_image(infile, isgrey)
            print(f'Image generated from "{infile}"')

            img.save(outfile, "PNG", compress_level=1)
            print(f'Image stored at "{outfile}"')
    except KeyboardInterrupt:
        print("Interrupted")


if __name__ == "__main__":
    it()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 29
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

shejizuopin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值