[发明专利]一种在计算机程序中嵌入和提取水印的方法有效
| 申请号: | 200810119358.0 | 申请日: | 2008-09-05 |
| 公开(公告)号: | CN101350055A | 公开(公告)日: | 2009-01-21 |
| 发明(设计)人: | 王建民;张长江;王朝坤;李德毅 | 申请(专利权)人: | 清华大学 |
| 主分类号: | G06F21/22 | 分类号: | G06F21/22 |
| 代理公司: | 北京清亦华知识产权代理事务所 | 代理人: | 罗文群 |
| 地址: | 1000*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 计算机 程序 嵌入 提取 水印 方法 | ||
1、一种在计算机程序中嵌入和提取水印的方法,其特征在于该方法包括以下步骤:
嵌入水印的过程为:
(1)将计算机程序版权人的版权信息和密钥信息分别转化为一个整型数字字符串,分别记为w和k,w和k是大整数;
(2)将上述w和k分别转换成具有n个元素的单调非递减的整数数组W[]和K[],n是水印嵌入者设定的整数,1≤i≤n-1,具体的转换过程为:
(2-1)任意设定一个大于1的整数q,求出满足不等式
(2-2)根据等式
(2-3)令W[0]=l-1,K[0]=p-1,对1≤i≤n-1,得到W[i]=W[i-1]+vi-1,K[i]=K[i-1]+ui-1;
(3)在上述转换得到的版权信息整数数组W[]与密钥信息整数数组K[]的每一对相对应的元素之间建立m个映射关系,m是水印嵌入者设定的另一整数,得到一个具有m×n个映射关系的集合;
(4)从计算机程序中选择待嵌入水印的方法,其过程为:
(4-1)建立一个待嵌入水印的方法集合,从计算机程序中读入一个方法;
(4-1-1)根据读入的方法的控制流构建该读入的方法的控制流图,并得到控制流图的基本图,求出该基本图中所有割点的集合;
(4-1-2)对割点集合进行判断,若为空集,则转入步骤(4-1-5),若不为空集,则读取上述割点集合中的一个割点;
(4-1-3)对读取的割点进行判断,若符合:与该读取的割点对应的控制流图中的基本块能被拆分成两个基本块,且在两个基本块之间插入一个新的基本块之后,两个基本块在新的控制流图中成为相邻割点,则该读取的割点为可嵌入水印的割点,记录与该可嵌入水印的割点相对应的基本块的入口位置,并将上述读入的方法加入到待嵌入水印的方法集合中,转入步骤(4-1-5),若不符合,转入步骤(4-1-4);
(4-1-4)对上述割点集合进行判断,若该割点集合的所有割点遍历结束,则转入步骤(4-1-5),否则,读取该割点集合中的下一个割点,转入步骤(4-1-3);
(4-1-5)若计算机程序中的所有方法遍历结束,则转入步骤(4-2),否则,读入计算机程序中的下一方法,重复步骤(4-1-1)至步骤(4-1-4),直至遍历计算机程序中的所有方法;
(4-2)判断可嵌入水印的割点个数,若少于m×n,则从计算机程序中任意选择一个不在待嵌入水印的方法集合中的方法,在与所选择的方法相对应的控制流图中添加新的分支,使得添加了新的分支的控制流图含有可嵌入水印的割点,记录与由于添加了新的分支而含有的可嵌入水印的割点相对应的基本块的入口位置,并将修改后的该所选择的方法加入到上述待嵌入水印的方法集合中,重复本步骤中以上部分直至遍历计算机程序中所有不在待嵌入水印的方法集合中的方法;
(4-3)判断可嵌入水印的割点个数,若仍然少于m×n,则从上述待嵌入水印的方法集合中随机选择一个方法,按照上述步骤(4-1)中的过程读入另一割点,找到一个可嵌入水印的割点,并记录与找到的可嵌入水印的割点相对应的基本块的入口位置,若没有找到可嵌入水印的割点,则在随机选择的方法体中添加改变该随机选择的方法的控制流的辅助代码,使得该随机选择的方法的控制流图中含有新的可嵌入水印的割点,并记录与该新的可嵌入水印的割点相对应的基本块的入口位置,重复本步骤中以上部分,直至可嵌入水印的割点个数达到m×n;
(5)将映射关系嵌入到选定的待嵌入水印的方法中,其过程为:
(5-1)从映射关系集合中选择一个映射关系,从上述待嵌入水印的方法集合中选择一个待嵌入水印的方法,并读取待嵌入水印的方法中的一个可嵌入水印的割点;
(5-2)为待嵌入水印的方法增加多个整型局部变量,使新增加的局部变量中编号最小的局部变量对应于映射关系中的自变量,编号最大的局部变量对应于映射关系中的因变量,创建局部变量初始化指令以及与映射关系相关的操作指令,并将操作指令与局部变量相关联,得到映射关系代码;
(5-3)将与从待嵌入水印的方法中读取的割点相对应的基本块拆分成两个基本块b1、b2,并将构建的映射关系代码以一个基本块b3插入到b1和b2之间,使得基本块b1、b2、b3满足:基本块b1跳向基本块b2和b3,基本块b3跳向基本块b2;
(5-4)读取下一个映射关系,判断待嵌入水印的方法中是否有新的可嵌入水印的割点,若有,则读取待嵌入水印的方法中下一个可嵌入水印的割点,并重复步骤(5-2)和步骤(5-3),完成映射关系代码的嵌入;若没有,则读取下一个待嵌入水印的方法,读取该下一个待嵌入水印的方法中一个可嵌入水印的割点,并重复以上步骤(5-2)和(5-3),完成映射关系代码的嵌入;
(5-5)重复步骤(5-4),直至所有映射关系代码嵌入到计算机程序中;
提取水印的过程为:
(6)建立一个待提取水印的方法集合;
(7)读取计算机程序中的一个方法,根据读取的方法的控制流构建与该读取的方法相对应的控制流图,得到相应的基本图,求出基本图的所有割点,得到一个割点集合,依次读取割点集合中的割点并进行判断,若与读取割点相对应的控制流图中的基本块b4满足:b4的跳转目标为两个基本块b5和b6,且基本块b5也为割点而b6不为割点,同时基本块b5为基本块b6的跳转目标,或基本块b6也为割点而b5不为割点,同时基本块b6为基本块b5的跳转目标,则对不为割点基本块作进一步判断,若满足:该不为割点基本块中含有的局部变量个数和类型与构建的映射关系代码中局部变量个数和类型相一致,则从计算机程序中提取该不为割点基本块中包含的操作指令以及所有局部变量的初始值,并根据操作指令和局部变量的初始值构建一个新的方法,具体构建过程如下:对按大小次序编号的上述不为割点基本块中的局部变量重新从0开始编号,使编号最小的局部变量为新方法的输入参数,编号最大的局部变量的值为新方法的返回值,使提取的操作指令作为新方法的操作指令;
(8)将上述新方法加入到上述待提取水印的方法集合中;
(9)重复上述步骤(7)和(8),直至计算机程序中的所有方法遍历结束;
(10)根据上述待提取水印的方法集合,创建提取辅助类,提取密钥,并解析出版权信息;
(11)使用与上述步骤(1)和(2)相同的方法,将用户的密钥信息转换成具有n个元素的单调非递减的整数数组g[];
(12)依次读取上述整数数组g[]中的每个整数,并分别将读取的整数作为上述提取辅助类中每个方法的输入,获得提取辅助类中每一个方法运行的返回值,若相同返回值的个数小于m,则提取密钥有误,提取失败,若相同返回值的个数大于或等于m,则将该相同返回值加入到整数数组h[]中;
(13)判断整数数组h[]是否为单调非递减,若不是,则显示提取失败,若是,则令上述l=h[0]+1,对0≤j≤n-2,令vj=h[j+1]-h[j],根据公式
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于清华大学,未经清华大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810119358.0/1.html,转载请声明来源钻瓜专利网。





