序列密码(流密码)介绍

一、序列密码概述

序列密码也称为流密码(Stream Cipher),它是对称密码算法的一种。序列密码具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点,因此在实际应用中,特别是专用或机密机构中保持着优势,典型的应用领域包括无线通信、外交通信。

它的加密方式是将明文和密钥进行异或运算,如:明文a,ASCLL码为97,二进制嘛为0110 0001;密钥为B,ASCLL码为66,二进制码为0100 0010,然后再按位异或:

明文 0 1 1 0 0 0 0 1
密钥 0 1 0 0 0 0 1 0
密文 0 0 1 0 0 0 1 1

这样得到的密文为0010 0011,对应的ascll为35,即“#”。

当我们拿到密文“#”以及密钥“B”以后,我们同样按照转换为ASCLL码,按位异或的方式,获得明文:

密文 0 0 1 0 0 0 1 1
密钥 0 1 0 0 0 0 1 0
明文 0 1 1 0 0 0 0 1

这样,我们获得了“0110 0001”,转换为十进制为97,对应ASCLL表,得到了字符“a”。

二、序列密码的定义

这里我们对序列密码的加密与解密有以下定义:

明文、密文和密钥序列都是由单独的位组成,即:Xi,Yi,Si ∈{0,1}

加密:Yi = (Xi + Si) mod 2

解密:Xi = (Yi + Si) mod 2

三、序列密码的特点

序列密码如果使用统一密钥多次拦截后,可以从其中的规律中推导出密钥。1941-1946年间,苏联多次使用同一密码本以便节约成本,最后被美国破译,在美国称为Venona计划。为了让序列秘密更加安全,于是产生了一次性密钥,但是序列密码最大的问题有两点:

1.密钥长度与明文长度一致,如果需要加密20M的明文,那么就需要20M的密文

2.序列密码容易被篡改。

四、简单的序列密码解密

知道了序列密码的原理,解密过程就简单了,只需要将密文与密钥按字符依次取出,转换为ascll码,按位异或,再将其组合为字符串即可获得明文。

这里,因为存在特殊符号,我们就先去askll码表中,查到了每个符号对应的askll码,如下:

"11","9","43","43","44","6","49","41","21","2","56","39","1","47","20"

这样,我们就可以通过powershell,将密文进行解密了,代码如下:

[string[]]$a_arr ="11","9","43","43","44","6","49","41","21","2","56","39","1","47","20"
[string]$miyue="EfcDAcFFgilHeNm"
[int]$cd = $miyue.Length
[char[]]$b_arr = $miyue.ToCharArray()
[string]$e_arr =""
for($i=1;$i -le $cd; $i++ )
{
[int]$c = $b_arr[$i-1]
[int]$d = $c -bxor $a_arr[$i-1]
[char]$e = $d
[string]$e_arr =$e_arr + $e

}

echo $e_arr

输出的结果为:

这就完成了对序列密码的解密。

猜你喜欢

转载自blog.csdn.net/weixin_47931795/article/details/107161839