版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
chap.5
数字水印编程网络信息安全本章内容要点概述
空间域图像数字水印
变换域图像水印编程
信息隐藏技术(InformationHidingTechnology),也称为信息伪装技术,是将秘密信息隐藏到一般的非秘密的多媒体载体信号(图像、声音、文本文档等)中,从而不让攻击者发现的一种技术。
信息隐藏技术隐藏秘密信息的存在,表面上看起来与一般的非保密信息没有两样,因而十分容易跳过攻击者的破解(与生物学上的保护色相似)。
道法自然2024/12/304信息隐藏与信息加密的区别在于:通过把秘密信息隐藏于可以公开的媒体信息中,来达到传递秘密信息的目的,它将秘密信息的传递过程进行了掩盖,攻击者无法判断所截获的媒体信息中是否有秘密信息的存在,难以实施攻击。信息隐藏技术所解决的安全有两方面的含义:一是通过把秘密信息永久地隐藏在可公开的媒体信息中,可以确保公开媒体信息(非秘密信息)在版权和使用权上的安全;二是秘密信息在传输和存储中的安全。信息隐藏技术可以实现:防窃听、防篡改、防伪造和防抵赖。
可以看出,Alice和Bob想要成功商讨逃跑计划,必须设计一个具有认证功能的阈下信道通信方案。simmons囚犯问题与阈下信道设有Alice和Bob已经入狱,他们唯一的通信方式是通过传递文电,但看守Warden充当传递文电的中间人,他监视着所有传递的文电,并要求文电不能加密,以检查Alice和Bob是否正在商讨逃跑计划.信息隐藏技术原理1.信息隐藏的定义信息隐藏技术,也称为信息伪装技术,是将秘密信息隐藏到一般的非秘密的多媒体载体信号(图像、声音、文本文档等)中,从而不让攻击者发现的一种技术。信息隐藏技术利用宿主信息中具有随机特性的冗余部分,将重要信息嵌入宿主信息中,使其不被其他人发现。信息隐藏技术隐藏秘密信息的存在,表面上看起来与一般的非保密信息没有两样,因而十分容易逃过攻击者的破解(这与生物学上的保护色相似)。信息隐藏不能与密码学混为一谈,因为二者区别在于:密码技术仅仅隐藏了信息的内容,而信息隐藏技术不但隐藏了信息的内容而且隐藏了信息的存在。一般而言,信息隐藏采用的隐蔽通信比加密通信更安全,因为它隐藏了通信的发送方、接收方及通信过程的存在,不易引起怀疑。5.1概述2.信息隐藏的过程3.信息隐藏的分类信息隐藏的分类方法有多种,可以从隐藏的载体来划分为:基于图像、音频、视频、文本等媒体技术的信息隐藏;也可以按照信息隐藏的目的来划分为:秘密消息隐藏和数字水印,其中秘密消息是用来进行秘密传输,数字水印是用来版权维护;还可以从技术实现上来划分为:掩蔽信道、匿名技术、隐写术和数字水印技术。下面将对数字水印编程技术进行重点探讨。
根据近几年发展,依据算法,数据隐写术可以分成6类:(1)替换系统:使用秘密信息隐蔽宿主的冗余信息部分;(2)变换域技术:在信号的变换域中嵌入秘密信息(比如在频域或时域中);(3)扩展频普技术:利用信息扩频通信的原理来实现秘密信息隐藏;
(4)失真技术:通过信号处理过程中的失真来保存信息,在解密时通过测量与原始信息载体的偏差以恢复秘密信息;
(5)载体生成方法:通过对信息进行编码以生成用于秘密通信的伪装载体,以隐蔽秘密信息;
(6)统计方法:通过改装伪装载体的若干统计特性对信息进行编码,并在提取过程中使用假设检验方法来达到恢复秘密信息。
2024/12/309①鲁棒性:不因宿主文件的某种改动而导致信息丢失②透明性:隐藏信息的透明性或不可感知性③不可检测性:伪装载体与原始载体具有一致的特性④安全性:隐藏算法有较强的抗攻击能力⑤自恢复性:恢复过程不需要宿主信号⑥对称性:隐藏和提取过程具有对称性⑦可纠错性:经过各种操作和变换后仍能很好地恢复信息隐藏的特性4.信息隐藏的应用信息隐藏技术所解决的安全问题包含两方面的意义:一是通过把秘密信息永久地隐藏在可公开的媒体信息中,可以确保公开媒体信息(非秘密信息)在版权和使用权上的安全;二是确保秘密信息在传输和存储中的安全。信息隐藏技术可以实现信息的防窃听、防篡改、防伪造和防抵赖,目前信息隐藏技术在信息安全的各个领域中所发挥的作用可以系统地总结为以下几个方面。(1)保密通信(2)所有权认定和版权保护(3)多媒体数据认证和完整性保护(4)隐含标注信息隐藏技术的应用
1.保密通信信息隐藏技术则是把秘密信息隐藏于难以引起敌对方注意的可公开的信息中,它试图掩盖的是通信存在的事实。与密码算法加密的区别。密码通信示意图信息隐藏通信示意图
2.所有权认定和版权保护数字媒体信息的所有权保护和认定是数字水印的重要应用领域,应用数字水印可以做到:(1)辨别数字媒体信息的所有权。(2)数字媒体产品的数字指纹。(3)防护非法复制。
3.多媒体数据认证和完整性保护
数字媒体的认证和完整性保护的典型例子包括防数据篡改、数字媒体真伪的鉴别等。
4.隐含标注隐含标注是在数字媒体信息中隐藏附加信息,可能有:(1)在网络浏览器中应用水印技术,可以实现智能浏览,应用于网上信息的搜索和数字媒体新鲜服务中。(2)多语种电影系统和电影分级系统。(3)数字媒体附加描述和参考信息的携带。1.数字水印的定义与分类数字水印技术就是将数字、序列号、文字、图像标志等版权信息嵌入到多媒体数据中,以起到版权跟踪及版权保护的作用。数字水印实现包括三步,即:水印嵌入、水印检测和水印提取。2.数字水印的实现方法在数字水印中,根据水印嵌入域的不同,可以分为两类:空间域和变换域两种方法。(1)空间域信息隐藏这种方法在空间域来实现信息隐藏,多采用替换法。由于人类感觉系统的有限性,感官对于某些感觉变化不敏感,可直接用欲隐藏的信息来替换载体文件的数据,但不会影响到载体文件的可见性。这类方法有一个比较严重的缺陷,就是在不破坏载体使用的情况下,载体越不重要的信息越容易丢失。如正常的有损压缩、信号滤波、载体的格式转换、叠加信道噪声等方法,都可以轻易地去除隐藏的秘密信息。空间域信息隐藏中,最常见的是最不重要位(LSB)替换,它将信息位替换到载体元素的最不重要位。虽然LSB实现速度较快,但其抵抗几何变形、噪声和压缩的能力较差。(2)变换域信息隐藏基于变换域的方法将欲隐藏的信息嵌入到载体文件的变换域系数中,再经过反变换生成隐密文件。变换域方法具有很好的鲁棒性(健壮性),对数据压缩、常用的滤波处理以及噪声等均有一定的抵抗能力。基于变换域的技术一般采用常用的变换,如:离散余弦变换(DiscreteCosineTransform,DCT),离散小波变换(DiscreteWaveletTransform,DWT)、傅里叶梅林变换(Fourier-Mellin)、离散傅里叶变换(DiscreteFourierTransform,DFT)或其他变换。3.数字图像水印的攻击技术与其它安全技术类似,水印技术在设计实现时必须考虑安全攻击的威胁,目前存在的针对数字图像水印的攻击技术可以分为两代。第一代数字水印攻击采用大量的信号和图像处理操作,具体可以分为:1)去除水印攻击:主要包括A/D、D/A转换、去噪、滤波、直方图修改、量化和有损压缩等。这些操作造成了媒体数据的信息损失,特别是压缩,能在保证一定信息质量的前提下,尽可能多地剔出冗余,使得水印被去掉。2)几何攻击:主要包括各种几何变换,例如:对图像实施旋转、平移、尺度变换、剪切、删除行或列、随机几何变换等。这些操作使得媒体数据的空间或时间序列的排布发生变化,造成水印的不可检测,因此也叫异步攻击。3)共谋攻击:攻击者利用同一条媒体信息的多个含水印拷贝,使用统计方法构造出不含水印的媒体数据。4)重复嵌入攻击:攻击者在已嵌入他人水印的媒体数据中嵌入自己的版权信息,从而造成版权纠纷。第二代水印攻击系统,由沃罗索诺夫斯基提出,其核心思想是利用合理的媒体数据统计模型和最大后验概率来估计水印或者原始媒体信号,从而将水印剔除。对攻击技术的分析和研究促进了水印技术的革新,但也为水印自身提出了一个又一个挑战。当前,还不存在一种算法能够抵抗所有的攻击,特别是几何攻击,这也是学术界公认的最困难的问题,目前还没有成熟的方案。5.2空间域图像数字水印1.信息冗余的概念人们在信息传播的过程中,所发出的消息/数据并不是彻底精练的信息,也就是说:除了一部分能够消除不确定性(信息)的数据以外,还有蕴含着一些非有效信息、甚至重复的数据,这就是信息冗余(redundancy)。冗余信息并不一定就是一些不必要的、多余的内容,在很多情况下,冗余对于保障通信是必不可少的,也是无法根本消除的。2.图像空间域水印方法图像空间域水印方法通过空间数据处理手段,将水印信息替换图像的冗余数据部分实现水印,最具代表性的就是LSB。LSB方法非常简单,以一幅灰度BMP图为例,首先,读取载体图像和秘密信息;然后对原始图像的最低位置零(1-3位),并不会改变图像的视觉效果;接着,将用秘密信息赋值给原始图像的最低位,实现秘密信息写入,写入以后,观察者看不见秘密信息的存在;最后,如果需要解码,只需要将图像的前高7位置零,仅留下最低位,就是秘密信息。3.LSB水印性能分析由于LSB位平面携带着水印,因此在嵌入水印图像没有产生失真的情况下,水印的恢复简单,只需要提取含水印图像的LSB位平面即可。LSB法最大的缺陷是对信号处理和恶意攻击的稳健性很差,对含水印图像进行简单的滤波、加噪等处理后,就无法进行水印的正确提取了。通过实验可知,LSB算法对于滤波操作和部分几何攻击的抵抗性最差。尽管如此,由于LSB方法实现简单,隐藏量比较大,还有很多应用。另外,以LSB思想为原型,人们还提出了一些变形的LSB方法,目前互联网上公布的图像隐藏软件大多使用这种方法。1.图像处理包安装图像LSB的实现需要安装图像处理包。可以使用pip安装CV2工具包和numpy工具包,用于图像处理和数据操作。在Windows命令行窗口,安装执行“pipinstallopencv-python”命令,将把处理包安装至本机。2.隐藏文件信息转二进制流由于要进行比特替换,所以要将待隐藏的文件信息转换为二进制格式,该项工作由read_data_file函数完成,具体如下。#文件信息转二进制流defread_data_file(path):fp=open(path,"rb")#❶stream=""s=fp.read()foriinrange(len(s)):tmp=bin(s[i]).zfill(8)#❷stream=stream+tmp.replace('0b','')#❸fp.close()returnstream进行LSB信息隐藏#实现LSB信息隐藏deflsb(image,data_stream,random_index):foriinrange(len(stream)):x=random_index[i]%image.shape[0]
#❶嵌入隐藏信息图像位置横坐标y=int(random_index[i]/image.shape[1])
#❷嵌入隐藏信息图像位置纵坐标value=image[x,y]ifvalue%2!=stream[i]:#❸ifvalue%2==1:image[x,y]=value-1else:image[x,y]=value+1returnimageif__name__=="__main__":text_path='C:\\test\\abc.txt'img_path='C:\\test\\original.png'out_path='C:\\test\\steg.png'stream=read_data_file(text_path)img=cv2.imread(img_path,0)pixel_len=img.shape[0]*img.shape[1]rate=len(stream)/pixel_len#❶print('隐写率:',rate)ifrate<=1:random_ls=random.sample(range(0,pixel_len),len(stream))#❷random_ls.sort()new_img=lsb(img,stream,random_ls)cv2.imwrite(out_path,new_img)print('success')else:print('数据过大')主程序5.3变换域图像数字水印1.图像变换域算法基础变换域水印方法将信息隐藏在载体文件变换后的次要位置,与空域方法相比,它对诸如压缩、修剪等处理的攻击鲁棒性更强,一般在正交变换域中进行。变换域法的主要特点是:将欲隐藏的信息嵌入到载体文件的变换域系数中,再经过反变换生成隐密文件(如:JEPG中的隐藏算法)。其优点是可以利用人眼对于不同空间频率的敏感度不同来决定秘密信息的嵌入位置和强度,从而确保嵌入信息的不可察觉性。导入DCT变换的图像,会生成出二维的DCT系数,并且这些系数具有很强的“能量集中”特性,大多数的自然信号(包括声音和图像)的能量都集中在离散余弦变换后的低频部分。小波信息隐藏是变换域水印新的研究方向,它可以充分利用人类的视觉模型(HVS)和听觉模型(HAS)的一些空间-频率特性,使嵌入信息的不可见性和鲁棒性都得到改善。自1986年以来,小波分析的理论、方法与应用的研究一直方兴未艾。作为一种数学工具,小波变换是对人们熟知的傅立叶变换和窗口傅立叶变换的一个重大突破,为信号分析、图像处理及其它非线性科学研究领域带来了革命性的影响。DCT水印首先对图像进行DCT变换,对于得到的DCT系数矩阵中选定的次要(中、高频系数)部分,依据嵌入信息进行调整,然后将调整后的DCT矩阵作反变换,生成含有水印的图像,具体方法如下。(1)对宿主图像和待嵌入的水印进行预处理、信息分析,满足后续处理要求。(2)将原始载体图像按N×N大小进行分块(一般是8×8),然后进行DCT变换,选择水印信息的嵌入位置。通常,由于人眼对位于低频部分的噪声相对敏感,为了使水印不易被察觉,应将水印信息嵌入到较高频率的DCT系数中。但将水印信息嵌入到DCT高频系数中,又会因量化、低通滤波等处理二丢失信息,影响水印的鲁棒性,因此采用折中的方法,将水印信息嵌入到载体图像的DCT中频系数中。(3)嵌入水印信息并进行分块DCT逆变换。确定合适的DCT中频系数位置后嵌入水印信息,通过子块的DCT逆变换生成含水印的图像。1.图像处理包安装与5.3.1节类似,如果系统没有安装,则需要使用pip安装CV2工具包和numpy工具包,用于支持图像处理和数据操作。安装需执行“pipinstallmatplotlib==3.3.0”命令(这里指定matplotlib版本为3.3.0),具体过程略。2.水印图像主函数if__name__=='__main__':img_file='./monarch.png'msg=input("请输入要嵌入的信息:")#❶由用户输入一段文本信息img_gray=cv2.imread(img_file,cv2.IMREAD_GRAYSCALE)#❷读取图片img_marked=dct_embed(img_gray,msg,20200417)#❸进行水印嵌入cv2.imwrite('monarch_marked.png',img_marked)
print(img_marked.shape,type(img_marked),type(img_marked[0,0]))img_stego=cv2.imread('monarch_marked.png',cv2.IMREAD_GRAYSCALE)msg_out=dct_extract(img_stego,20200417)#❹水印读取print('嵌入的信息为:',msg)print('提取的信息为:',msg_out)
plt.figure(figsize=(4,3))#❺将嵌入前和嵌入后的图片绘制比较plt.subplot(121),plt.imshow(img_gray,cmap='gray'),plt.title('Cover')plt.subplot(122),plt.imshow(img_marked,cmap='gray'),plt.title('Marked')plt.tight_layout()plt.show()defdct_embed(img_gray,msg,seed=2020):#Step1:检查嵌入内容的比特长度msg2embed=str2bitseq(msg)#❶将字符串转换为比特序列len_msg=len(msg2embed)
N=8#计算当前图片的嵌入容量受否满足,以N见方的方块为单位height,width=img_gray.shapeEC=((height-2)*(width)/N/N)#❸计算有多少个N比特方块,计算公式为(高度-2)*宽度/N^2ifEC<len_msg:print('EmbeddingCapacity{}notenough'.format(EC))returnimg_gray
#对嵌入消息进行加密random.seed(seed)#设置随机数种子s=[random.randint(0,1)foriinrange(len_msg)]
#❹利用随机数生成器生成一个与消息等长的二进制序列bits2embed=np.bitwise_xor(msg2embed,np.uint8(s))print('Toembed:',bits2embed)
#Step2数据嵌入img=img_gray[2:,:].copy()#去掉前两行用于存储辅助信息height,width=img.shapecnt=0delta=0.01forrowinnp.arange(0,height,N):ifcnt>=len_msg:breakforcolinnp.arange(0,width,N):ifcnt>=len_msg:break#❺将1比特的消息嵌入到一对DCT系数中block=np.array(img[row:(row+N),col:(col+N)],np.float32)block_dct=cv2.dct(block)#❻使用dct获得img的频域图像a,b=(block_dct[2,4],block_dct[4,2])ifblock_dct[2,4]>block_dct[4,2]\#❼else(block_dct[4,2],block_dct[2,4])a+=deltab-=delta#❽如果写入比特为1将a赋值给block_dct[2,4]block_dct[2,4]=(aifbits2embed[cnt]==1elseb)#小值赋值给block_dct[4,2],如果写入比特为0,反向操作block_dct[4,2]=(bifbits2embed[cnt]==1elsea)cnt+=1
img[row:(row+N),col:(col+N)]=np.array(cv2.idct(block_dct),np.uint8)
#step3:隐藏消息长度信息在图像的第一行数据中#❾将发送消息长度转换为二进制数,形如:0b11000,去除该二进制数'0b'标志,填充0得到24位数bits_bin=(bin(len_msg).replace('0b','')).zfill(24)img_marked=img_gray.copy()fori,bitinenumerate(bits_bin):img_marked[0,i]&=(255-1)#254即为:11111110,与之作与操作,即为最低位清0img_marked[0,i]+=np.uint8(bit)#❿将消息长度的1比特赋值该像素最低位(bit与bits_bin[i]相等)print("bit",bit,bits_bin[i])
img_marked[2:,:]=img#保留前两行,将嵌入水印的消息填入图像后面内容
returnimg_markeddefdct_extract(img_marked,seed=2020):#Step1:抽取水印信息长度bits_bin=''foriinrange(24):#❶依次提取前24像素的最低位bits_bin+=bin(img_marked[0,i]&1).strip('0b').zfill(1)len_msg=int('0b'+bits_bin,2)
水印提取函数
#Step2:抽取水印信息内容N=8img=img_marked[2:,:]height,width=img.shapemsg_embedded=''cnt=0forrowinnp.arange(0,height,N):ifcnt>=len_msg:
break
forcolinnp.arange(0,width,N):ifcnt>=len_msg:
break
#❷比较block_dct[2,4]与block_dct[4,2]的大小,得到0或1block=np.array(img[row:(row+N),col:(col+N)],np.float32)block_dct=cv2.dct(block)msg_embedded+=('1'ifblock_dct[2,4]>block_dct[4,2]else'0')cnt+=1bits_extracted=[np.uint8(c)forcinmsg_embedded]
#Step3:对抽取的水印信息内容解密random.seed(seed)s=[random.randint(0,1)foriinrange(len_msg)]msgbits=np.bitwise_xor(bits_extracted,np.uint8(s))#❸异或操作msg=bitseq2str(msgbits)
returnmsgDWT水印嵌入算法首先将原始图像的二维信号进行小波变换,将水印信息嵌入小波分解的高频子带中(原则上可以通过增加分层增加嵌入数据容量,但增加分解层次会对人类视觉产生很大的影响),可以满足隐蔽性的要求,具体方法如下。(1)载入原始图像I,使用小波函数对图像进行二维离散小波变换(变换无需对图像分块)。(2)定义一个阈值T,在I中嵌入水印。选择小波分解的高频系数矩阵,如果系数矩阵的每一个元素值大于阈值T,则将这个值加上一个均值为0方差为1的伪随机序列,否则不改变系数矩阵中的元素值。(3)使用小波分解的低频系数和改变后的高频系数矩阵进行小波反变换,重构图像并输出。wm=cv2.imread(wmname,cv2.IMREAD_GRAYSCALE)#读取待嵌入的水印start_time=time.clock()#记录时间LL_2,dwt_2,dwt_1,dwt_0=generate_LL_2(conver_img)
#❸三层小波变换得到LL_2Y_split_embed=embed(LL_2,dwt_2,dwt_1,dwt_0,wm)#❹得到嵌入水印后的Y分量print('嵌入耗费时间:',(time.clock()-start_time))
wm_temp=cv2.imread(outname)#wm_temp=crop(wm_temp)#❺水印攻击#wm_temp=scale(wm_temp)#wm_temp=crop_scale(wm_temp)#wm_temp=scale_crop(wm_temp)wm_out=extract(wm_temp)#❻读取嵌入的水印
plt.figure(figsize=(8,3))plt.rcParams['font.sans-serif']=['SimHei']#解决plt汉字显示问题plt.rcParams['axes.unicode_minus']=Falseplt.subplot(141),plt.imshow(img,cmap='gray'),plt.title('原图')plt.subplot(142),plt.imshow(Y_split_embed,cmap='gray'),plt.title('带水印图')plt.subplot(143),plt.imshow(wm,cmap='gray'),plt.title('原水印')plt.subplot(144),plt.imshow(wm_out,cmap='gray'),plt.title('提取水印')plt.tight_layout()plt.show()#❼绘制图片if__name__=='__main__':imgname='lena.jpg'#❶宿主图片wmname='wm.png'#水印图片outname='dwt_'+imgname#嵌入水印的图片名称wm_outname='ex_'+imgname#提取出来的水印图片名称Q=32img=cv2.imread(imgname)#读入宿主图片conver_img=cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)#转为YCRCB色彩空间上
#❷为确保正确进行dwt变换,要将长宽调整成为被8整除height,weith=conver_img.shape[:2]ifnotheight%8==0:height-=height%8ifnotweith%8==0:weith-=weith%8conver_img=conver_img[:height,:weith,:]水印的嵌入由函数generate_LL_2和embed配合实现,其中generate_LL_2的功能是提取图像的LL2频带,代码如下defgenerate_LL_2(conver_img):#转换RGB到YCRCB,在Y分量上加水印Y_split=conver_img[:,:,0]#dwt变换3次LL,(HL,LH,HH)=pywt.dwt2(np.array(Y_split),'haar')LL_1,(HL_1,LH_1,HH_1)=pywt.dwt2(np.array(LL),'haar')LL_2,(HL_2,LH_2,HH_2)=pywt.dwt2(np.array(LL_1),'haar')
returnLL_2,(HL_2,LH_2,HH_2),(HL_1,LH_1,HH_1),(HL,LH,HH)defextract(ex_img):ex_wm=[]ex_img=cv2.cvtColor(ex_img,cv2.COLOR_BGR2YCrCb)#❶对图像进行转换Y_split=ex_img[:,:,0]
LL,(HL,LH,HH)=pywt.dwt2(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年苍山洱海文旅职业学院高职单招职业适应性测试考试模拟试卷带答案详解(综合卷)
- 2025年汾源职业学院高职单招职业技能考试题库1套附答案详解
- 2024年甘肃祁连山职业学院单招综合素质考试题库带答案详解(能力提升)
- 2026年烟台职业学院高职单招职业技能考试模拟试卷含答案详解【典型题】
- 2024年湖南铁航信息职业学院高职单招职业适应性测试考试题库含答案详解AB卷
- 2027年山东茌平职业学院高职单招职业适应性测试考试模拟试卷带答案详解(培优B卷)
- 2024年陕西渭水职业学院高职单招职业技能考试题库【含答案详解】
- 2026年河南平顶山新华职业学院高职单招职业适应性测试考试题库附答案详解(完整版)
- 2025年江苏徐州彭城职业学院高职单招职业适应性测试考试题库(夺分金卷)附答案详解
- 2024年苏州工业职业学院高职单招职业适应性测试考试模拟试卷含答案详解(巩固)
- 国家职业技术技能标准 6-29-01-01 砌筑工 人社厅发20235号
- 七年级下册历史期末测试卷含答案
- 中医医疗技术手册2013普及版
- 生鲜品类提升计划方案
- 高档普采工作面管理课件
- 乙烯装置操作手册
- 鼎捷T100-V1.0-总账管理用户手册-简体
- GB/T 14781-2023土方机械轮式机器转向要求
- 小儿多发伤的护理业务学课件
- 电子束曝光技术专题培训课件
- 餐饮连锁加盟店营建手册
评论
0/150
提交评论