密码学原理与应用课程设计 报告贾明龙.docx
- 文档编号:30196544
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:55
- 大小:512.33KB
密码学原理与应用课程设计 报告贾明龙.docx
《密码学原理与应用课程设计 报告贾明龙.docx》由会员分享,可在线阅读,更多相关《密码学原理与应用课程设计 报告贾明龙.docx(55页珍藏版)》请在冰豆网上搜索。
密码学原理与应用课程设计报告贾明龙
HarbinInstituteofTechnologyatWeihai
密码学原理与应用
课程设计报告
设计题目:
对图片进行加密和转换
班级:
1204201
学号:
100410607
姓名:
贾明龙
验收日期:
2014-12-22
哈尔滨工业大学(威海)计算机学院
二零一二年一月
1.密码算法原理
1.1JPEG
1.1.1JPEG文件的基本数据结构
JPEG文件基本的数据结构分为两大类型:
段和经过压缩编码后的图像数据。
段分为段标识、段类型、段长度、段内容。
JPEG文件结构如图1-1-1JPEG文件结构示意图。
SOI(文件头)
APP0(图像识别信息)
COM(注释)
DQT(定义量化表)
SOFO(图像基本信息)
DHT(定义Huffman表)
DRI(定义重新开始间隔)
SOS(扫描行开始)
图像压缩数据
EOI(文件尾)
图1-1-1JPEG文件结构示意图
图像数据则需要根据JPEG压缩步骤进行编码。
下面将对JPEG文件的段的设计和图像数据的编码(压缩)进行分析。
1.1.2JPEG文件组成
段的一般结构见表1-1-2段的一般结构。
表1-1-2段的一般结构
名称
字节数
数据
说明
段标识
1
FF
每个新段开始标识
段类型
1
类型编码(标记码)
段长度
2
包括段内容和段长度
段内容
VAR
≤65533字节
段的类型:
SOI(文件头)、APP0(图像识别信息)、COM(注释)、DQT(定义量化表)、SOFO(图像基本信息)、DHT(定义Huffman表)、DRI(定义重新开始间隔)、SOS(扫描行开始)、图像压缩数据、EOI(文件尾)。
段类型分类情况见表1-1-3段类型分类。
表1-1-3段类型分类
────────────────────────────────
名称标记码说明
────────────────────────────────
SOID8文件头
EOID9文件尾
SOF0C0帧开始(标准JPEG)
SOF1C1同上
DHTC4定义Huffman表(霍夫曼表)
SOSDA扫描行开始
DQTDB定义量化表
DRIDD定义重新开始间隔
APP0E0定义交换格式和图像识别信息
COMFE注释
────────────────────────────────
说明:
有的文献也将DNL段(标记码=DC,定义扫描行数)列为必须段。
下面将按一遍JPEG文件的段排列顺序对段类型进行详细介绍。
(1)SOI(文件头)
SOI(文件头)结构见表1-1-4。
表1-1-4SOI(文件头)结构
────────────────────────────────
名称字节数值
────────────────────────────────
段标识1FF
段类型1D8
────────────────────────────────
说明:
这两个字节构成了JPEG文件头。
(2)APP0(图像识别信息)
APP0结构见表1-1-5。
表1-1-5APP0(图像识别信息)结构
────────────────────────────────
名称字节数值说明
────────────────────────────────
段标识1FF
段类型1E0
段长度20010如果有RGB缩略图就=16+3n
(以下为段内容)
交换格式54A46494600JFIF的ASCII码
主版本号1
次版本号1
密度单位10=无单位;1=点数/英寸;2=点数/厘米
X像素密度2水平方向的密度
Y像素密度2垂直方向的密度
缩略图X像素1缩略图水平像素数目
缩略图Y像素1缩略图垂直像素数目
RGB缩略图3*nn=缩略图像素总数=缩略图X像素*缩略图Y像素
────────────────────────────────
说明:
JFIF是JPEGFileInterchangeFormat的缩写,即JPEG文件交换格式,另外还有TIFF等格式,但很少使用。
关于“如果有RGB缩略图就=16+3n”的解释:
比如,缩略图X像素和缩略图Y像素的值均为48,就表示有一个48*48像素的缩略图(n=48*48),缩略图是24位真彩位图,用3个字节来表示一个像素,所以共占用3n个字节。
但大多数JPG文件都没有缩略图。
(3)COM(注释)
COM结构见表1-1-6。
表1-1-6COM(注释)结构
────────────────────────────────
名称字节数值说明
────────────────────────────────
段标识1FF
段类型1FE
段长度2其值=注释字符的字节数+2
段内容注释字符
────────────────────────────────
说明:
有些JPEG文件没有该段。
(4)DQT(定义量化表)
DQT结构见表1-1-7。
表1-1-7DQT(定义量化表)
────────────────────────────────
名称字节数值说明
────────────────────────────────
段标识1FF
段类型1DB
段长度243其值=3+n(当只有一个QT时)
(以下为段内容)
QT信息10-3位:
QT号
4-7位:
QT精度(0=8bit;否则=16bit)
QTnn=64*QT精度的字节数
说明:
JPEG文件一般有2个DQT段,为Y值(亮度)定义1个,为C值(色度)定义1个。
一个DQT段可以包含多个QT,每个都有自己的信息字节
(5)SOFO(图像基本信息)
SOFO结构见表1-1-8。
表1-1-8SOFO(定义量化表)
────────────────────────────────
名称字节数值说明
────────────────────────────────
段标识1FF
段类型1C0
段长度2其值=8+组件数量*3
(以下为段内容)
样本精度18每个样本位数(大多数软件不支持12和16)
图片高度2
图片宽度2
组件数量131=灰度图,3=YCbCr/YIQ彩色图,4=CMYK彩色图
(以下每个组件占用3字节)
组件ID11=Y,2=Cb,3=Cr,4=I,5=Q
采样系数10-3位:
垂直采样系数
4-7位:
水平采样系数
量化表号1
────────────────────────────────
说明:
JPEG大都采用yCrCb色彩模型(y表示亮度,Cr红色分量,Cb表示蓝色分量),所以组件数量一般=3。
样本就是单个像素的颜色分量,也可理解为一个样本就是一个组件。
采样系数是实际采样方式与最高采样系数之比,而最高采样系数一般=0.5(分数表示为1/2)。
比如说,垂直采样系数=2,那么2*0.5=1,表示实际采样方式是每个点采一个样,也就是逐点采样;如果垂直采样系数=1,那么1*0.5=0.5(分数表示为1/2),表示每2个点采一个样。
(6)DHT(定义Huffman表)
DHT结构见表1-1-9。
表1-1-9DHT(定义Huffman表)
────────────────────────────────
名称字节数值说明
────────────────────────────────
段标识1FF
段类型1C4
段长度2其值=19+n(当只有一个HT表时)
(以下为段内容)
HT信息10-3位:
HT号
4位:
HT类型,0=DC表,1=AC表
5-7位:
必须=0
HT位表16这16个数的和应该≤256
HT值表nn=表头16个数的和
────────────────────────────────
说明:
JPEG文件里有2类Haffman表:
一类用于DC(直流量),一类用于AC(交流量)。
一般有4个表:
亮度的DC和AC,色度的DC和AC。
最多可有6个。
一个DHT段可以包含多个HT表,每个都有自己的信息字节。
HT表是一个按递增次序代码长度排列的符号表。
(7)DRI(定义重新开始间隔)
DRI结构见表1-1-10。
表1-1-10DRI(定义重新开始间隔)
────────────────────────────────
名称字节数值说明
────────────────────────────────
段标识1FF
段类型1DD
段长度24
(以下为段内容)
开始间隔2n复位标记的间隔距离
────────────────────────────────
说明:
开始间隔表示在压缩数据流中,每隔n个MCU块就有一个RST标记,RST标记将Huffman的解码数据流复位,DC也重新从0开始,因此,RST标记是一种复位标记
RST标记是一种特殊的段,它只具有段标识和段类型(长度=2字节),但它不是独立的段,只能穿插在数据流中(文件头和文件尾段也只有段标识和段类型,却都是独立的段)。
RST标记共有8个(RST0-RST7),从RST0起开始使用,然后是RST1,RST2,……,RST7,再从RST0重复。
RST标记的标识码是FFD0-FFD7,对应RST0-RST7。
(8)SOS(扫描行开始)
SOS结构见表1-1-11。
表1-1-11SOS(扫描行开始)
────────────────────────────────
名称字节数值说明
────────────────────────────────
段标识1FF
段类型1DA
段长度2000C其值=6+2*扫描行内组件数量
(以下为段内容)
扫描行内组件数量13必须≥1,≤4(否则错误),通常=3
(以下每个组件占用2字节)
组件ID11=Y,2=Cb,3=Cr,4=I,5=Q
Huffman表号10-3位:
AC表号(其值=0,1,2,3)
4-7位:
DC表号(其值=0,1,2,3)
3最后3个字节用途不明,忽略
────────────────────────────────说明:
紧接SOS段后的是压缩的图像数据(一个个扫描行),数据存放顺序是从左到右、从上到下。
(9)EOI(文件尾)
EOI结构见表1-1-12。
表1-1-12EOI(文件尾)结构
────────────────────────────────
名称字节数值说明
────────────────────────────────
段标识1FF
段类型1D9
────────────────────────────────说明:
这两个字节构成了JPEG的文件尾。
1.2BMP
1.2.1BMP文件的基本数据结构
BMP文件由文件头(bitmap-fileheader)、位图信息头(bitmap-informationheader)、颜色信息(也叫彩色表)(colortable)和图形数据四部分组成。
1.2.2BMP文件组成
BMP文件组成见表1-2-1。
表1-2-1BMP文件组成
位图文件的组成
结构名称
备注
位图文件头
(bitmap-fileheader)
BITMAPINFOHEADER
结构名称为微软在VC中(WINGDI.H)定义的结构体名称。
注:
在编程中一般都把彩色表放到位图信息头,即实际处理为三部分。
位图信息头
(bitmap-informationheader)
BITMAPINFOHEADER
彩色表
(colortable)
RGBQUAD
图像数据阵列字节
BYTE
(1)位图文件头:
位图文件头结构见表1-2-2。
表1-2-2位图文件头结构
────────────────────────────────
名称字节数说明
────────────────────────────────
Identifier2用来识别位图类型,BM代表Windows3.1x,95,NT等
FileSize4用字节表示整个文件大小
Reserved4保留,设置为0
BitmapDataOffset4从文件开始到数据开始之间的偏移量
────────────────────────────────
(2)位图信息头:
位图信息头结构见表1-2-3。
表1-2-3位图信息头结构
────────────────────────────────
名称字节数说明
────────────────────────────────
BitmapHeaderSize4图像信息头的长度
Width4位图的宽度,以像素为单位
Height4位图的高度,以像素为单位
Planes2位图的位面数,总为1
BitsPerPixel2每个像素的位数
Compression4压缩说明
BitmapDataSize4用字节数表示数据大小,为4的倍数H
HResolution4用像素/米表示水平分辨率
VResolution4用像素/米表示垂直分辨率
Colors4位图使用的颜色数
ImportantColors4
dentifier2用来识别位图类型,BM代表Windows3.1x,95,NT等
FileSize4用字节表示整个文件大小
Reserved4保留,设置为0
BitmapDataOffset4文件开始到数据开始之间偏移量
────────────────────────────────
(3)彩色表:
彩色表结构见表1-2-4。
表1-2-4彩色表结构
────────────────────────────────
名称字节数说明
────────────────────────────────
PaletteN*43字节描述RGB值,N由每个像素个数决定
────────────────────────────────
(4)图像数据:
图像数据结构见表1-2-5。
表1-2-5图像数据结构
────────────────────────────────
名称字节数说明
────────────────────────────────
BitmapDataVAR实际是彩色调色版的索引号,字节数需为4的倍数
────────────────────────────────
1.2.3BMP编码
R、G、B分别用1个字节表示,即每一个像素点为3个字节,编码完成后补0,使得图像数据字节总数为4的倍数。
1.3MP3
1.3.1MP3文件的基本数据结构
MP3文件大体分为三部分:
TAG_V2(ID3V2),Frame,TAG_V1(ID3V1)。
其中TAG_V2(ID3V2)和TAG_V1(ID3V1)可以称为标签帧,Frame称为数据帧。
可以看出,MP3是由帧构成的。
2.设计思想
JPEG与BMP的相互转换
1.JPEG转BMP:
根据JPEG的文件结构,对JPEG文件解析,并对数据部分解码,再按照BMP方式编码即可。
具体流程图见“3.设计流程图”。
2.BMP转JPEG:
根据BMP的文件结构,对BMP文件解析,并对数据部分解码,再按照JPEG方式编码即可。
具体流程图见“3.设计流程图”。
3.设计流程图
(1)jpg-bmp
(2)bmp-jpg
(3)加密
4.功能实现
1.1JPEG编码
JPEG是一个适用范围很广的静态图像数据压缩标准,既可用于灰度图像又可用于彩色图像。
JPEG专家组开发了两种基本的压缩算法,一种是采用以离散余弦变换(DiscreteCosineTransform,DCT)为基础的有损压缩算法,另一种是采用以预测技术为基础的无损压缩算法。
使用有损压缩算法时,在压缩比为25:
1的情况下,压缩后还原得到的图像与原始图像相比较,非图像专家难于找出它们之间的区别,因此得到了广泛的应用。
JPEG压缩是有损压缩,它利用了人的视角系统的特性,使用量化和无损压缩编码相结合来去掉视角的冗余信息和数据本身的冗余信息。
JPEG算法框图如图4-1-1(a)和图4-1-1(b)。
图4-1-1(a)JPEG编码算法
图4-1-1(b)JPEG解码算法
JPEG压缩步骤:
正向离散余弦变换(FDCT)、量化(Quantization)、Z字形编码(ZigzagScan)、使用差分脉冲编码调制(DifferentialPulseCodeModulation,DPCM)对直流系数(DC)进行编码、使用行程长度编码(Run-LengthEncoding,RLE)对交流系数(AC)进行编码、熵编码(EntropyEoding)。
下面对JPEG压缩中的各个步骤进行介绍。
正向离散余弦变换:
对每个单独的彩色图像分量,把整个分量图像分成8×8的图像块,并作为两维离散余弦变换DCT的输入。
通过DCT变换,把能量集中在少数几个系数上,如图4-1-2。
图4-1-2DCT变换
DCT变换使用下列公式:
它的逆变换使用下列公式式:
上面两式中,
,
,当
,
且
,
时,
经DCT变换之后,
是直流系数,其他为交流系数。
在计算两维的DCT变换时,使用下列计算式把两维的DCT变换变成一维的DCT变换:
量化:
量化是对经过FDCT变换后的频率系数进行量化。
量化的目的是减小非“0”系数的幅度以及增加“0”值系数的数目。
量化是图像质量下降的最主要原因。
对于有损压缩算法,JPEG算法使用如下图所示的均匀量化器进行量化,量化步距是按照系数所在的位置和每种颜色分量的色调值来确定。
因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:
亮度量化值和色差量化值。
此外,由于人眼对低频分量的图像比对高频分量的图像更敏感,因此图中的左上角的量化步距要比右下角的量化步距小。
下面2个表中的数值对CCIR601标准电视图像已经是最佳的。
如果不使用这两种表,你也可以把自己的量化表替换它们。
DCT系数输入与量化系数输出之间的关系如图4-1-3。
图4-1-3DCT系数输入与量化系数输出之间的关系
亮度量化值表和色度量化值表见表4-1-4。
表4-1-4亮度量化值和色度量化值
Z字形编排:
量化后的系数要重新编排,目的是为了增加连续的“0”系数的个数,就是“0”的游程长度,方法是按照Z字形的式样编排,如图4-1-5。
这样就把一个8×8的矩阵变成一个1×64的矢量,频率较低的系数放在矢量的顶部。
图4-1-5Z字形编排
量化DCT系数序号见表4-1-6。
表4-1-6量化DCT系数序号
0
1
5
6
14
15
27
25
2
4
7
13
16
26
29
42
3
8
12
17
25
30
41
43
9
11
18
24
31
40
44
53
10
19
23
32
39
45
52
54
20
22
33
38
46
51
55
60
21
34
37
47
50
56
59
61
35
36
48
49
57
58
62
63
直流系数的编码:
8×8图像块经过DCT变换之后得到的DC直流系数有两个特点,一是系数的数值比较大,二是相邻8×8图像块的DC系数值变化不大。
根据这个特点,JPEG算法使用了差分脉冲调制编码(DPCM)技术,对相邻图像块之间量化DC系数的差值(
)进行编码。
交流系数的编码:
量化AC系数的特点是1×64矢量中包含有许多“0”系数,并且许多“0”是连续的,因此使用非常简单和直观的游程长度编码(RLE)对它们进行编码。
JPEG使用了1个字节的高4位来表示连续“0”的个数,而使用它的低4位来表示编码下一个非“0”系数所需要的位数,跟在它后面的是量化AC系数的数值。
熵编码:
使用熵编码还可以对DPCM编码后的直流DC系数和RLE编码后的交流AC系数作进一步的压缩。
在JPEG有损压缩算法中,使用霍夫曼编码器来减少熵。
使用霍夫曼编码器的理由是可以使用很简单的查表(LookupTable)方法进行编码。
压缩数据符号时,霍夫曼编码器对出现频度比较高的符号分配比较短的代码,而对出现频度较低的符号分配比较长的代码。
这种可变长度的霍夫曼码表可以事先进行定义。
组成位数据流:
JPEG编码的最后一个步骤是把各种标记代码和编码后的图像数据组成一帧一帧的数据,这样做的目的是为了便于传输、存储和译码器进行译码,这样的组织的数据通常称为JPEG位数据流(JPEGbitstream)。
1.2MP3解码
MP3的解码总体上可分为9个过程:
比特流分解,霍夫曼解码,逆量化处理,立体声处理,频谱重排列,抗锯齿处理,IMDCT变换,子带合成,PCM输出。
PCM是数字通信的基础,由于信号是用一系列分开的脉冲来传送的,除非失去一个完整的脉冲,或干扰脉冲大到足以使设备当作真信号脉冲接受,PCM不会引入失真,也不会丢失信息。
MP3解码流程如图4-2-1。
图4-2-1MP3解码流程
MP3解码步骤:
(1)主控模块
主控模块的主要任务是操作输入输出缓冲区,调用其它各模块协同工作。
其中,输入输出缓冲区均由DSP控制模块提供接口。
输入缓冲区中放的数据为原始MP3压缩数据流,DSP控制模块每次给出大于最大可能帧长度的一块缓冲区,这块缓冲区与上次解帧完后的数据(必然小于一帧)连接在一起,构成新的缓冲区。
输出缓冲区中将存放的数据为解码出来的PCM数据,代表了声音的振幅。
它由一块固定长度的缓冲区构成,通过调用DSP控制模块的接口函数,得到头指针,在完成输出缓冲区的填充后,调用中断处理输出至I2S接口所连接的音频ADC芯片(立体声音频DAC和DirectDrive耳机放大器)输出模拟声音。
(2)同步及差错检测
同步及差错检测模块主要用于找出数据帧在比特流中的位置,并对以此位置开始的帧头、CRC校验码及帧边信息进行解码,这些解码的结果用于后继的尺度因子解码模块和哈夫曼解码模块。
Mpeg1layer3的流的主数据格式如同4-2-2。
图4-2-2主数据的组织结构图
其中granule0和gr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 密码学原理与应用课程设计 报告贾明龙 密码学 原理 应用 课程设计 报告 贾明龙
![提示](https://static.bdocx.com/images/bang_tan.gif)