NCR洗牌算法

 

NCRShuffle(混淆)算法,做ATM的很多都知道,并且都使用有封装好的现成接口,但是基本没有多少人知道其算法原理,所以将原理写在这,给需要的人提供些许帮助。

以下为举例。比如

Shuffle的数据(J)0123456789 123456

参与ShuffleKey(K)12345678

Basic Shuffle Key(L)19F2 C827 6AD0 839B

其中对于J/K/L的计算都是从后往前算的,即对于J是从6开始,最后到0K是从81。 

说明:下面的数字没有说明的,默认指10进制数字。

定义:mint,初值为0

基本算法:

1J6K8相加,等于14,然后与m相加。此时m为初值0,仍然为14

214除以10,得到除数为1,赋给m,此时m1,余数为4

3、将L的最后一位“B”16进制转成10进制,则为11。用11和上面的4异或,得到1515转为16进制为“F”,再和0X30相加,得到0X3F。将0X3F转成ASCII码,为

4、至此,Shuffle处理的最后一位完成。

5、接着是倒数第二位计算,过程与上面一样,唯一的区别是m是可能发生了变化的,为01

6、等到算到第9位后,m值恒为0,因为K的长度只为8位。

 

 

计算过程见下表:

次数

计算过程

m

Basic Shuffle Key(L)

异或(余数和L

输出(ASCII)

1

6+8+0

1

B

4B

3F(?)

2

5+7+1

1

9

39

3A(:)

3

4+6+1

1

3

13

32(2)

4

3+5+1

0

8

98

31(1)

5

2+4+0

0

0

60

36(6)

6

1+3+0

0

D

4D

39(9)

7

2+9+0

1

A

1A

3B(;)

8

1+8+1

1

6

06

36(6)

9

7+0+1

0

7

87

3F(?)

10

……

…….

 

 

……..

 


程序(待续):

 

 

你可能感兴趣的:(NCR洗牌算法)