本帖最后由 宇宙飞船 于 2010-8-9 12:20 编辑
这是加解密必需用到的汇编指令(8条)。
and 与 // logical and registers
or 或 // logical or registers
xor 异或 // exclusive OR registers
LSL 左移 // logical shift left
LSR 右移 // logical shift right
ROL 带进位左环移 // rotale left through carry
ROR 带进位右环移 // rotale right through carry
com 取反 // one's compement
一些技术上的老鸟(本身对术数悟性太差的缘故),一见到飞船用and 和 or 指令来加解密,就笑飞船信口开河!
飞船将引领AVR初学者用汇编一步一步踏进加解密的大门,揭开加密解密的神秘面纱。
------------**最简单的加密------------
最原始最简单的加密就是把字节移位若干次,例如:
字母 A 的代码是 1
字母 B 的代码是 3
字母 C 的代码是 5
A左移3位, 得 1*8=8
B左移3位, 得 3*8=24
C左移3位, 得 5*8=40
当我们截获 (A,B) ,(A,C) (B,C) 的任意其中一组数据,
设截获了B与C两字节数据 b=24 ,c=40 得
3*K=24
5*K=40
通过解方程组得系数 K=8 这样就**完毕。
假若左移后再取反如何**?欲知后事如何,
请听下回分解(未完待续!)
***************************
2010-8-8 续:
3的反码=FC
5的反码=FA
5-3=2 (结果正), FA-FC=-2 (结果负)
根据结果是负得知,数据已取反
以上考虑的是不丢模的理想情况下实现的**。
假若已丢模了,从截获的几个数据点中该如何测定丢模?这是一个非常有趣的等差数列求解问题。MCU的实现上可以采取遍历移位法,其中的关键技术点就是断定符合条件的情况,原理并不复杂,这个问题留待大家思考。
只要把以上的简单步聚搞熟了,就知道了加密的关键点在哪里,解密的难点在哪,正所谓知已知彼百战百胜。
以下直接切入加密的讨论中,这里要用到一些关键的MCU技术,位提取搬移技术,
这里采用的通用的and , or 两条指令
举例子说明一下用法:
把第0位与第1位互换,(0度水平局部转置)
10101001 ----> 10101010
把(1)式的0位与(2)式的0位互换(90度垂直转置)
(1) 10101001 10101000
(2) 10100010 ----> 10100011
以上举例说明了这两条指令的用法,是魔方旋转的基础。
该如何制造障眼法?也就是把全00,或FF,或有规律的原始数据变成看似无规律?
0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF
欲知后事如何,请听下回分解。 |