前言:

摘抄自wiki的关于仿射变换的定义:

仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。

一个对向量

 平移

,与旋转放大缩小

 的仿射映射为

【1】

1、移位加密:

比方说:把字母表全部向右循环移1位,也就是A变成B,B变成C,... ,

Z变成A。

用数学一点的术语我觉得所谓“移位”就是映射吧。

那么我们可以写出通解公式,——现在是已知明文和加密步骤,进行加密,也就是求密文。

New = (Old + k) (mod table)

【2】

注释:

New:要求的密文

Old  :明文

k :移位的位数

table:这张表有多大,比方说字母表就是26个字母,table就是26.

2、仿射变换:

移位加密和仿射变换有啥关系呢?

额 ,因为移位加密就是一种放射变换。。。

首先我们在1里面的变量命名现在改一下,以便更好地认识,变成:

y

= (x + b)(mod m) 【3】

是不是和【1】很像啦,可惜我们的x没有系数。。

但是没关系,我们完全可以自己加上一个系数,把【3】变成:

y

= (ax + b)(mod m)   a,b为整数; 【4】

这样已经很像了,只不过【1】里面的自变量是向量。

但是,我们这里讨论的是一维的变换,所以不用用到2维及其以上的向量。(一维数字标记的向量就是普通的数嘛……)

3、知道了1、2这些,我们现在的目标就是——

"当知道一个一维的仿射变换的加密,

a. 怎么把明文加密

b.

怎么把密文解密 "

对于"a.

怎么把明文加密",我们已经解决了,就是【4】那个公式。

对于"b.

怎么把密文解密"嘛,其实也不复杂。待我不快不慢地说来。

首先由【4】我们可以得到什么?

没错!就是 y

≡ (ax + b)(mod m) —— 这是明显的事实不用证明了。

然后正视一下题目是什么:我们现在已知a,b,y,m,要求x。

1). 左右移位一下 ,变为y-b

≡ (ax)(mod m) 【5】

{为啥【5】是对的?

首先同余式可以相加,

即 若 a ≡ b (mod m),c ≡ d (mod m), 【*】

那么(a +

c) ≡ (b + d)(mod m) .

——同余式可以相加的证明用同余的定义就好……

然后  y ≡ (ax +

b)(mod m)

-b ≡ -b (mod

m)

所以……

}

2). 已知y-b

≡ (ax)(mod m),x未知,求x.

现在已知ax ≡(y-b) (mod

m);

{首先我们要知道 同余式可以相乘,若【*】,则 ac

≡ bd (mod m) .证明同样可以基于同余定义。}

这时候我们就脑补了,如果有一个c能使得

cax ≡ x ≡ c(y-b) (mod m)就好了!

也就是说这个c如果能使得ca = 1或者 更宽一点的:ca ≡ 1(mod

m).那么就解决了!

3). 于是问题变成了:找一个c使得,ca ≡ 1(mod

m)

于是很容易联系到费马小定理、欧拉定理一类的。

但是费马小定理要求m一定要是素数,这样和我们题目不符。

所以看看欧拉定理,对 gcd(a,m) =

1(m>1),有aΦ(m)≡ 1 (mod m)

{Φ(m) 为欧拉函数,就是小于等于m的与m互素的正整数个数。如Φ(2) = 1

,Φ(6) = 2——6与{1,5}互素。}

所以如果ca

= aΦ(m),那么就有ca ≡ 1(mod m)。

于是c

= aΦ(m)-1. 但是gcd(a,m) = 1,这一点不能漏。

4、综上,我们发现了,当c

= aΦ(m)-1时 ;

cax ≡c(y-b) (mod m)

化为 x ≡c(y-b) (mod m) {现在要附加gcd(a,m)=1这个条件了!}

5、那么对于仿射变换,

我们知道变化规则[即位移b]后,如何把密文[y]翻译成明文[x]呢?

结论是:

step

1.  求 c

= aΦ(m)-1

step 2.  x ≡c(y-b) (mod m)

番外小剧场:

窝:你在2里面为啥要改名字?该问题纯属好奇!

big窝:此中原因有2——

1. 如文中所说,为了更直观地比较。

2.

也是最根本的原因——变量命名如此之平凡,根本不是我的feel!OK?

窝:......

窝:第二个问题——你怎么知道同余式符合相加相乘原理?你怎么想到的?

big窝:

首先"同余式符合相加相乘原理"这个结论在数论里就像是实数有相加相乘的运算一样自然,如果想不到那么你需要找一本数论的书看看,不需要看完这就足以变成你的常识。至于怎么想到的,如果给你一堆数,你能想到的最基本的运算就是做加减乘除了吧?

窝:恩……好像是的……

big窝:那不就得了,说了同余式符合相加相乘原理是同余式的基本运算。

窝:……哦……

原文:http://www.cnblogs.com/PeanutPrince/p/3543723.html

java仿射变换解密,仿射变换与加密相关推荐

  1. js base64加密 java base64解密_JS base64 加密和 后台 base64解密(防止中文乱码)

    //UnicodeAnsi.js文件//把Unicode转成Ansi和把Ansi转换成Unicode function UnicodeChr() {return '00A4,00A7,00A8,00B ...

  2. 【Java】MD5字符串的加密解密

    至于为什么要给字符串加密解密,各种加密解密的方式优缺点对比等等,本文都不会讲,弄点实用的代码,给需要应急的朋友应急 废话不多说,看代码了: import java.security.Key; impo ...

  3. java中完成md5加密解密_java实现md5加密解密 notNET中加密和解密的实现方法

    java实现md5加密解密 notNET中加密和解密的实现方法 亦或是旅途风光 7-14 1918℃ 22 [ ee21.cn - ASP.NET ] .NET将原来独立的API和SDK合并到一个框架 ...

  4. rsa实现js前台加密java后台解密

    前段时间咱老大吩咐我写一个rsa前台加密到后台用java解密.(说实话这之前我还真没用过) 不过没办法啊,这是任务,于是研究了一下.圆满完成任务了,下面共享下实现思路: 准备工作:其实鄙人也没那么强啦 ...

  5. angular和JAVA实现aes、rsa加密解密,前后端交互,前端加解密和后端JAVA加解密实现

    今天实现了下AES和RSA加密解密,主要的功能是对前后端交互数据进行加密解密,为什么要用到两个算法呢,首先RSA默认的话加密长度是有限的100多个byte吧大约,并且需要公钥私钥,而AES加密没有限制 ...

  6. [转]DES加密 java与.net可以相互加密解密两种方法

    [转]原文地址:http://jumpman.javaeye.com/blog/605996 DES加密 java与.net可以相互加密解密两种方法 文章分类:Java编程 通过这个方法可以实现jav ...

  7. java ios 3des_IOS开发入门之iOS 3DES加密 和 java 3DES 解密

    本文将带你了解IOS开发入门之iOS 3DES加密  和 java  3DES 解密,希望本文对大家学ios有所帮助 对称加密算法 3des   在iOS 客户端加密算法 首先进入头文件: #impo ...

  8. ios rsa加密 java解密_iOS RSA加密与解密 签名与验签(附Java端处理)

    本篇文章将涉及以下几个操作: 1.iOS端使用RSA公钥加密,iOS端使用RSA私钥解密. 2.iOS端使用RSA私钥加签,iOS端使用RSA公钥验签. 3.iOS端使用RSA公钥加密,Java端使用 ...

  9. jsencrypt.js加密java后端解密

    文章目录 1.什么是RSA? 2.RSA算法 2.1 生成公钥和私钥 2.2 使用公钥加密信息 2.3 使用私钥解密信息 4.RSA的应用:数字签名 5.RSA的安全性 6.为什么要写这文章? 7.前 ...

最新文章

  1. BMC Biology:香港城市大学孙燕妮组发表高准确度预测病毒宿主的工具
  2. 查看python 3.x 关键字 (保留字)(预留字)
  3. Tensorflow:interactivesession和session的区别。
  4. Silverlight 多窗口的实现.
  5. oracle-备份工具exp-imp
  6. 风机桨叶故障诊断(六) 利用自编码器进行特征学习
  7. Drawing with GoogLeNet
  8. struts2+hibernate3.3+spring3.0 实现零配置
  9. 由swap引出的局部变量,形参和指针的小问题
  10. 阿里云云计算 22 VPC连接
  11. tsmaster中文版(M3U8下载器)
  12. 电脑桌面云便签怎么登录便签账号?
  13. 软件测试测试常见分类有哪些?
  14. 《谁动了我的奶酪》感悟
  15. 戴尔服务器装完系统没启动项,华硕电脑重装系统后没有硬盘启动项是什么原因?...
  16. Codeforces_714_A
  17. 这款耳机的性价比堪比AirPods,写代码的你可以看看
  18. KinectFusion原理介绍
  19. 安卓期末大作业——番茄小说APP
  20. Qt5:error: no matching function for call to 'MainWindow::connect()

热门文章

  1. 3306端口被占用,解决办法
  2. 怎么用计算机ping组播地址,能正常Ping通组播源地址
  3. root方法参考,ROOT操作
  4. Dots杂项(不定期更新)
  5. amba_device amba总线
  6. C++ iomanip函数库使用说明
  7. 利用requests做八字排盘的爬虫
  8. 华三交换机V5版本配置ssh登录
  9. Python pip的使用(安装、卸载、升级)
  10. zTree 异步加载