在直角三角形中,已知一整数直角,求另一整数直角边和整数斜边。
即A^2+B^2=C^2 (^表示乘方)
先引用我6年前一文中的话语:
整数直角三角形谜底——一种MCU加密解密算法
勾3股4弦5!每个人都明白。
对应的数学表达式:a^2+b^2=c^2.每个人都会!
但在a>=3且a,b,c都为整数的直角三角形问题中
已知a求b,c无穷解变成了数学归纳问题的唯一解。
例: 解:
3^2 + 4^2= 5^2 9 + 16 = 25
4^2 + 3^2= 5^2 16 + 9 = 25
5^2 +12^2=13^2 25 + 144 = 169
6^2 + 8^2=10^2 36 + 64 = 100
7^2 +24^2=25^2 49 + 576 = 625
8^2 +15^2=17^2 64 + 225 = 289
9^2 +40^2=41^2 81 +1600 =1681
.....................................................
255^2+32512^2=32513^2 65025+1057030144=1057059169
256^2+16383^2=16385^2 65536+ 268402689= 268468225
257^2+33024^2=33025^2 66049+1090584576=1090650625
258^2+16640^2=16642^2 66564+ 276889600= 276956164
数学归纳(加密过程):
当a为奇数时,b为a平方砍半取整,c比b大1。、
即 b="int"((a^2)/2). c="b"+1.
当a为偶数时,b为a砍半平方小1,c比b大2。
即 b=(a/2)^2-1. c="b"+2.
字节加密与解密问题:
由于本算法从3开始,而字节值从0开始。故需加减3转换。
10进制表示
原码A 密码B 密码C
0(3) 4 5
1(4) 3 5
2(5) 12 13
3(6) 8 10
4(7) 24 25
5(8) 15 17
6(9) 40 41
7(10) 24 26
。。。。。。。。。。。。。。。。。。。。。。。。。。
252(255) 32512 32513
253(256) 16383 16385
254(257) 33024 33025
255(258) 16640 16642
16进制表示
原码A 密码B 密码C (2字长)
00 0004 0005
01 0003 0005 (最小值为0003H,0005H)
02 000C 000D
03 0008 000A
04 0018 0019
05 000F 0011
06 0028 0029
07 0018 001A
。。。。。。。。。。。。。。。。。。。。。。。。。。
FC 7F00 7F01
FD 3FFF 4001
FE 8100 8101 (最大值为8100H,8101H)
FF 4100 4102
合并密码B密码C为1个字长:
当a为奇数时有: 密码BC=(密码B/2)|0x8000
当a为偶数时有: 密码BC=密码B
16进制表示
原码A 密码BC(1字长)
00 8002 (变换)
01 0003
02 8006 (变换)
03 0008
04 800C (变换)
05 000F
06 8014 (变换)
07 0018
。。。。。。。。。。。。。。。。。。。。。。。。。。
FC BF80 (变换)
FD 3FFF
FE C080 (变换)
FF 4100
解密过程:
当密码BC>0x8000时有:密码B=(密码BC*2)&0xffff 密码C=密码B+1
当密码BC<0x8000时有:密码B=密码BC 密码C=密码B+2
解密算法:
原码A=(密码C^2-密码B^2)^(1/2)-3
若对密码B密码C进行2次CRC加密后,该算法将非常可靠。
以后,若有机会,我会道出“CRC的妙用”的。
当用于MCU时,昏天盖地的开方与乘方汇编产生的代码
一定会使解读者头昏眼花的!!!
因为解读者将搞不清原设计者在干些什麽活动???
HotPower在此声明:
未经本人许可,本算法不得在任何地方发表。
否则,一切后果自负!
2003。7。17
我对中学生讲时一般用(让他们骗他们的老师~~~):
若A为奇数时,A先平方后“砍半”即为B和C.
若A为偶数时,A先“砍半”后“手拉手”即为B和C.
例: 3 3^2=9 9/2=4和5 即3^2+4^2=5^2
4 4/2=2 2^2=4(3,5) 即4^2+3^2=5^2
若要将三角引伸到加密领域,还要继续推敲。
在A,B,C中,C与B的差恒为1(A为奇数)或2(A为偶数)
当A为奇数时,有: A^2 = C^2 - (C - 1)^2 = 2*C - 1
当A为偶数时,有: A^2 = C^2 - (C - 2)^2 = 4*C - 4 = 4*(C-1)
例: 3^2 = 2 * 5 - 1 = 9
4^2 = 4 * (5 - 1) = 16
5^2 = 2 *13 - 1 = 25
6^2 = 4*(10 - 1) = 36
7^2 = 2 * 25 - 1 = 49
同理,因为C = B + 1(A为奇数)或C = B + 2(A为偶数)
当A为奇数时,有: A^2 = C^2 - (C - 1)^2 = 2*C - 1 = 2*(B + 1) - 1 = 2*B + 1
当A为偶数时,有: A^2 = C^2 - (C - 2)^2 = 4*C - 4 = 4*(C-1) = 4*(B+2-1)= 4* (B + 1)
例: 3^2 = 2 * 4 + 1 = 9
4^2 = 4 * (3 + 1) = 16
5^2 = 2 *12 + 1 = 25
6^2 = 4*(8 + 1) = 36
7^2 = 2 * 24 + 1 = 49
从表达式可以看出A和C及A和B之间“简单的关系”。这里C=B+1或C=B+2
从2*B+1,2*C-1或4*(B+1),4*(B+1)中我们可以发现:
求另一直角边B时用"+",求另一斜边C时用"-".
三角作为密码的初衷也起源于“椭圆曲线密码”和公开密钥算法中的大质数分解问题。
就前者可能是出于“图形”和圆方程A^2 + B^2 = 1的“相似”
后者是2个质数是不同的,而三角密码涉及的“乘方”是2个相同的“质数”~~~
就图形而言,圆是椭圆的一个特例,三角是圆上的三点~~~他们都是亲戚~~~
对质数而言,它不过是个简单的三元一次方程,而三角却是一个三元二次方程。
大质数的命题:n=pq,2个大质数p和q的积为n.命题是n“很难分解出”p和q.
试想一个“大整数直角边”要想得到(分解)出“一个大整数直角边和斜边”
也是难度很大~~~不过“三角陷门”把问题简化为了乘方和开方问题~~~
由于C=B+1,2,故三元三次方程实际简化为X^2=Y;(其中Y=2*Z+-1或Y=4*(Z+-1))
或y=x*x. 这和n=p*q很相似吧~~~当p=q时它们就是一家了~~~
所以用三角做密码是柔和了椭圆和大质数的共同特点。
先到这里,菜农随意惯了,想到哪里写到哪里,很是抱歉~~~
能搞明白俺的思路,脑浆必须属于“发散型的散列函数”~~~
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!