发明名称 基于夹角变换的线面类型GIS矢量数据伪装与还原方法
摘要 本发明公开了一种基于夹角变换方法进行线面类型GIS矢量数据伪装与还原的方法,属于地理信息安全领域。本发明的数据伪装处理步骤:先设置密钥文件,再逐个读取要素的数据;基于密钥选择点对,并绕其相邻的左控制点进行旋转操作;将每个要素都处理完毕后保存伪装的数据。经本发明的方法进行伪装处理后,要素图层中坐标值发生改变从而导致坐标位置发生偏移,数据精度发生变化,对于数据精度质量要求较高的GIS矢量数据来说,这一处理显著降低了数据质量和数据使用价值,限制了非法拷贝或拦截数据的正常使用,达到一定的数据保护目的,一定程度上满足了GIS矢量数据的隐藏通信与安全传输需求。
申请公布号 CN102622409B 申请公布日期 2013.10.09
申请号 CN201210029064.5 申请日期 2012.02.09
申请人 南京师范大学 发明人 张驰;闾国年;李安波;林冰仙
分类号 G06F17/30(2006.01)I;H04L9/00(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 南京知识律师事务所 32207 代理人 汪旭东
主权项 1.基于夹角变换的线面类型GIS矢量数据伪装与还原方法,包括以下过程:(1)伪装过程:步骤11,设置一个二进制格式的长度为n的随机序列信息M={M<sub>i</sub>},其中i=0,1,…,n-1;步骤12,打开一个线面类型GIS矢量数据文件,根据伪装要求,设置角度旋转值β&lt;45°;依次读取文件中每一要素的空间数据,获取各个要素中坐标点的个数m并判断所述要素是否需进行伪装处理:i)若m&gt;=n,则按照<img file="FDA00003023728900011.GIF" wi="255" he="75" />将前n×L个坐标点分为L组,转入下一个步骤进行处理;ii)若m&lt;n,则对所述要素不进行数据伪装处理;步骤13,对要素F中的每一分组F<sub>j</sub>,根据密钥循环从分组F<sub>j</sub>中筛选需要进行处理的数据对,其中j=0,1,…,L-1,筛选规则为:i)如果M<sub>i</sub>=1或i=0或i=n-1,则该分组F<sub>j</sub>中第i个点G<sub>i</sub>作为控制点不进行处理;ii)如果M<sub>i</sub>=0且i≠0且i≠n-1,则该分组F<sub>j</sub>中第i个点G<sub>i</sub>转入下一个步骤进行处理;步骤14,判断点G<sub>i</sub>是否需要进行伪装处理a)查找与点G<sub>i</sub>(X<sub>i</sub>,Y<sub>i</sub>)相邻的左右两个控制点A(X<sub>m</sub>,Y<sub>m</sub>)、B(X<sub>n</sub>,Y<sub>n</sub>);b)以A点、G<sub>i</sub>点为端点,生成向量<img file="FDA00003023728900012.GIF" wi="472" he="86" />以A点、B点为端点,生成向量<maths num="0001"><![CDATA[<math><mrow><mover><mi>AB</mi><mo>&RightArrow;</mo></mover><mrow><mo>(</mo><msub><mi>X</mi><mi>n</mi></msub><mo>-</mo><msub><mi>X</mi><mi>m</mi></msub><mo>,</mo><msub><mi>Y</mi><mi>n</mi></msub><mo>-</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>c)计算向量<img file="FDA00003023728900014.GIF" wi="82" he="88" />和<img file="FDA00003023728900015.GIF" wi="72" he="75" />的夹角θ;d)根据θ值判断是否进行下一步伪装处理,规则为:i)如果<img file="FDA00003023728900016.GIF" wi="446" he="71" />则G<sub>i</sub>不处理;ii)如果θ∈(0,β)∪(β,2β)则G<sub>i</sub>转入下一个步骤进行处理;步骤15,判断向量<img file="FDA00003023728900018.GIF" wi="80" he="87" />和<img file="FDA00003023728900019.GIF" wi="66" he="72" />的左右关系并设置标志值flaga)按下式将G<sub>i</sub>绕A点逆时针旋转角度θ生成临时点T<sub>i</sub>(X<sub>ti</sub>,Y<sub>ti</sub>);<maths num="0002"><![CDATA[<math><mrow><mfenced open='{' close=''><mtable><mtr><mtd><msub><mi>X</mi><mi>ti</mi></msub><mo>=</mo><msub><mi>X</mi><mi>m</mi></msub><mo>+</mo><mrow><mo>(</mo><msub><mi>X</mi><mi>i</mi></msub><mo>-</mo><msub><mi>X</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>cos</mi><mi>&theta;</mi><mo>-</mo><mrow><mo>(</mo><msub><mi>Y</mi><mi>i</mi></msub><mo>-</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>sin</mi><mi>&theta;</mi></mtd></mtr><mtr><mtd><msub><mi>Y</mi><mi>ti</mi></msub><mo>=</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>+</mo><mrow><mo>(</mo><msub><mi>Y</mi><mi>i</mi></msub><mo>-</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>cos</mi><mi>&theta;</mi><mo>+</mo><mrow><mo>(</mo><msub><mi>X</mi><mi>i</mi></msub><mo>-</mo><msub><mi>X</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>sin</mi><mi>&theta;</mi></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow></math>]]></maths>b)计算旋转后的向量<img file="FDA000030237289000111.GIF" wi="76" he="87" />和<img file="FDA000030237289000112.GIF" wi="69" he="73" />的夹角,如果夹角为0,则表明初始状态下向量<img file="FDA000030237289000113.GIF" wi="84" he="87" />在<img file="FDA000030237289000114.GIF" wi="70" he="73" />的右侧,设flag为false;否则向量<img file="FDA00003023728900021.GIF" wi="84" he="84" />在<img file="FDA00003023728900022.GIF" wi="72" he="68" />的左侧,设flag为true;步骤16,利用角度旋转方法对G<sub>i</sub>进行伪装,根据<img file="FDA00003023728900023.GIF" wi="84" he="87" />与<img file="FDA00003023728900024.GIF" wi="70" he="74" />的夹角θ及flag值做以下处理:i)如果θ∈(0,β)且flag为true,或者θ∈(β,2β)且flag为false,利用下式修改G<sub>i</sub>点坐标,将其绕A点逆时针旋转角度旋转值β生成G<sub>i</sub>(X′′<sub>i</sub>,Y′′<sub>i</sub>);<maths num="0003"><![CDATA[<math><mrow><mfenced open='{' close=''><mtable><mtr><mtd><msubsup><mi>X</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>=</mo><msub><mi>X</mi><mi>m</mi></msub><mo>+</mo><mrow><mo>(</mo><msub><mi>X</mi><mi>i</mi></msub><mo>-</mo><msub><mi>X</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>cos</mi><mi>&beta;</mi><mo>-</mo><mrow><mo>(</mo><msub><mi>Y</mi><mi>i</mi></msub><mo>-</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>sin</mi><mi>&beta;</mi></mtd></mtr><mtr><mtd><msubsup><mi>Y</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>=</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>+</mo><mrow><mo>(</mo><msub><mi>Y</mi><mi>i</mi></msub><mo>-</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>cos</mi><mi>&beta;</mi><mo>+</mo><mrow><mo>(</mo><msub><mi>X</mi><mi>i</mi></msub><mo>-</mo><msub><mi>X</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>sin</mi><mi>&beta;</mi></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow></math>]]></maths>ii)如果θ∈(0,β)且flag为false,或者θ∈(β,2β)且flag为true,利用下式修改G<sub>i</sub>点坐标,将其绕A点顺时针旋转角度旋转值β生成G<sub>i</sub>(X′′<sub>i</sub>,Y′′<sub>i</sub>);<maths num="0004"><![CDATA[<math><mrow><mfenced open='{' close=''><mtable><mtr><mtd><msubsup><mi>X</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>=</mo><msub><mi>X</mi><mi>m</mi></msub><mo>+</mo><mrow><mo>(</mo><msub><mi>X</mi><mi>i</mi></msub><mo>-</mo><msub><mi>X</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>cos</mi><mrow><mo>(</mo><mo>-</mo><mi>&beta;</mi><mo>)</mo></mrow><mo>-</mo><mrow><mo>(</mo><msub><mi>Y</mi><mi>i</mi></msub><mo>-</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>sin</mi><mrow><mo>(</mo><mo>-</mo><mi>&beta;</mi><mo>)</mo></mrow><mi></mi></mtd></mtr><mtr><mtd><msubsup><mi>Y</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>=</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>+</mo><mrow><mo>(</mo><msub><mi>Y</mi><mi>i</mi></msub><mo>-</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>cos</mi><mrow><mo>(</mo><mo>-</mo><mi>&beta;</mi><mo>)</mo></mrow><mo>+</mo><mrow><mo>(</mo><msub><mi>X</mi><mi>i</mi></msub><mo>-</mo><msub><mi>X</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>sin</mi><mrow><mo>(</mo><mo>-</mo><mi>&beta;</mi><mo>)</mo></mrow><mi></mi></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow></math>]]></maths>步骤17,重复上述步骤12到16,直至每一要素处理完毕后,保存伪装后的数据文件,并将随机序列信息M及角度旋转值β存入密钥文件key;(2)还原过程:步骤21,从密钥文件key中读取角度旋转值值β及随机序列信息M={M<sub>i</sub>},其中i=0,1,…,n-1;步骤22,打开一个线面类型GIS矢量数据文件,依次读取每一要素的空间数据,获取各个要素中坐标点的个数m并判断所述要素是否需进行进一步处理:i)若m&gt;=n,则按照<img file="FDA00003023728900027.GIF" wi="256" he="79" />将前n×L个坐标点分为L组,转入下一个步骤进行处理;ii)若m&lt;n,则本要素不进行数据还原处理;步骤23,对要素F中的每一分组F<sub>j</sub>,根据密钥循环从分组F<sub>j</sub>中筛选需要进行处理的数据对,其中j=0,1,…,L-1,筛选规则为:i)如果M<sub>i</sub>=1或i=0或i=n-1,则该分组F<sub>j</sub>中第i个点G<sub>i</sub>作为控制点不进行处理;ii)如果M<sub>i</sub>=0且i≠0且i≠n-1,则该分组F<sub>j</sub>中第i个点G<sub>i</sub>转入下一个步骤进行处理;步骤24,判断点G<sub>i</sub>是否需要进行还原处理a)查找与点G<sub>i</sub>(X′′<sub>i</sub>,Y′′<sub>i</sub>)相邻的左右两个控制点A(X<sub>m</sub>,Y<sub>m</sub>)、B(X<sub>n</sub>,Y<sub>n</sub>);b)以A点、G<sub>i</sub>点为端点,生成向量<img file="FDA00003023728900031.GIF" wi="572" he="84" />以A点、B点为端点,生成向量<img file="FDA00003023728900032.GIF" wi="518" he="76" />c)计算向量<img file="FDA00003023728900033.GIF" wi="86" he="88" />和<img file="FDA00003023728900034.GIF" wi="72" he="70" />的夹角θ′;d)根据θ′值判断是否进行下一步还原处理,规则为:i)如果<img file="FDA00003023728900035.GIF" wi="468" he="68" />则G<sub>i</sub>不处理;ii)如果θ′∈(0,β)∪(β,2β)则G<sub>i</sub>转入下一个步骤进行处理;步骤25,判断向量<img file="FDA00003023728900037.GIF" wi="82" he="88" />和<img file="FDA00003023728900038.GIF" wi="72" he="72" />的左右关系并设置标志值flaga)按下式将G<sub>i</sub>(X′′<sub>i</sub>,Y′′<sub>i</sub>)绕A点逆时针旋转角度θ′生成临时点T′<sub>i</sub>(X′<sub>ti</sub>,Y′<sub>ti</sub>);<maths num="0005"><![CDATA[<math><mrow><mfenced open='{' close=''><mtable><mtr><mtd><msubsup><mi>X</mi><mi>ti</mi><mo>&prime;</mo></msubsup><mo>=</mo><msub><mi>X</mi><mi>m</mi></msub><mo>+</mo><mrow><mo>(</mo><msubsup><mi>X</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>-</mo><msub><mi>X</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>cos</mi><msup><mi>&theta;</mi><mo>&prime;</mo></msup><mo>-</mo><mrow><mo>(</mo><msubsup><mi>Y</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>-</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>sin</mi><msup><mi>&theta;</mi><mo>&prime;</mo></msup></mtd></mtr><mtr><mtd><msubsup><mi>Y</mi><mi>ti</mi><mo>&prime;</mo></msubsup><mo>=</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>+</mo><mrow><mo>(</mo><msubsup><mi>Y</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>-</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>cos</mi><msup><mi>&theta;</mi><mo>&prime;</mo></msup><mo>+</mo><mrow><mo>(</mo><msubsup><mi>X</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>-</mo><msub><mi>X</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>sin</mi><msup><mi>&theta;</mi><mo>&prime;</mo></msup></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow></math>]]></maths>b)计算旋转后的向量<img file="FDA000030237289000310.GIF" wi="81" he="87" />和<img file="FDA000030237289000311.GIF" wi="68" he="70" />的夹角,如果夹角为0,则表明初始状态下向量<img file="FDA000030237289000312.GIF" wi="82" he="86" />在<img file="FDA000030237289000313.GIF" wi="68" he="70" />的右侧,设flag为false,否则向量<img file="FDA000030237289000314.GIF" wi="80" he="85" />在<img file="FDA000030237289000315.GIF" wi="68" he="71" />的左侧设flag为true;步骤26,利用角度旋转方法对G<sub>i</sub>进行还原,根据<img file="FDA000030237289000316.GIF" wi="82" he="86" />与<img file="FDA000030237289000317.GIF" wi="73" he="70" />的夹角θ′及flag值做以下处理:i)如果θ′∈(0,β)且flag为true,或者θ′∈(β,2β)且flag为false,利用下式将G<sub>i</sub>绕A点逆时针旋转角度旋转值β还原成G<sub>i</sub>(X<sub>i</sub>,Y<sub>i</sub>);<maths num="0006"><![CDATA[<math><mrow><mfenced open='{' close=''><mtable><mtr><mtd><msub><mi>X</mi><mi>i</mi></msub><mo>=</mo><msub><mi>X</mi><mi>m</mi></msub><mo>+</mo><mrow><mo>(</mo><msubsup><mi>X</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>-</mo><msub><mi>X</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>cos</mi><mi>&beta;</mi><mo>-</mo><mrow><mo>(</mo><msubsup><mi>Y</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>-</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>sin</mi><mi>&beta;</mi></mtd></mtr><mtr><mtd><msub><mi>Y</mi><mi>i</mi></msub><mo>=</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>+</mo><mrow><mo>(</mo><msubsup><mi>Y</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>-</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>cos</mi><mi>&beta;</mi><mo>+</mo><mrow><mo>(</mo><msubsup><mi>X</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>-</mo><msub><mi>X</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>sin</mi><mi>&beta;</mi></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>5</mn><mo>)</mo></mrow></mrow></math>]]></maths>ii)如果θ′∈(0,β)且flag为false,或者θ′∈(β,2β)且flag为true,利用下式将G<sub>i</sub>绕A点顺时针旋转角度旋转值β还原成G<sub>i</sub>(X<sub>i</sub>,Y<sub>i</sub>);<maths num="0007"><![CDATA[<math><mrow><mfenced open='{' close=''><mtable><mtr><mtd><msub><mi>X</mi><mi>i</mi></msub><mo>=</mo><msub><mi>X</mi><mi>m</mi></msub><mo>+</mo><mrow><mo>(</mo><msubsup><mi>X</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>-</mo><msub><mi>X</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>cos</mi><mrow><mo>(</mo><mo>-</mo><mi>&beta;</mi><mo>)</mo></mrow><mo>-</mo><mrow><mo>(</mo><msubsup><mi>Y</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>-</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>sin</mi><mrow><mo>(</mo><mo>-</mo><mi>&beta;</mi><mo>)</mo></mrow><mi></mi></mtd></mtr><mtr><mtd><msub><mi>Y</mi><mi>i</mi></msub><mo>=</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>+</mo><mrow><mo>(</mo><msubsup><mi>Y</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>-</mo><msub><mi>Y</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>cos</mi><mrow><mo>(</mo><mo>-</mo><mi>&beta;</mi><mo>)</mo></mrow><mi></mi><mo>+</mo><mrow><mo>(</mo><msubsup><mi>X</mi><mi>i</mi><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msubsup><mo>-</mo><msub><mi>X</mi><mi>m</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>sin</mi><mrow><mo>(</mo><mo>-</mo><mi>&beta;</mi><mo>)</mo></mrow><mi></mi></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>6</mn><mo>)</mo></mrow></mrow></math>]]></maths>步骤27,重复上述步骤22到26,直至每一要素处理完毕后,保存还原后的数据文件。
地址 210046 江苏省南京市栖霞区文苑路1号