整数直角三角形谜底——一种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
相关链接:http://www.**/blog/hotpower/60553/message.aspx |