试图实现Speck32 / 64块密码

时间:2015-12-22 10:26:56

标签: c# algorithm encryption cryptography block-cipher

我正在尝试在c#中实现Speck 32/64分组密码,我坚持使用加密解密算法。我知道我应该根据算法

将纯文本分成2个单词
x,y = plaintext words
--------------------------- key expansion --------------------------
for i = 0..T-2
[i+m-1] ← (k[i] + S−α
[i]) ⊕ i
k[i+1] ← S
β k[i] ⊕ `[i+m-1]
end for
---------------------------- encryption ----------------------------
for i = 0..T-1
x ← (S−α x + y) ⊕ k[i]
y ← S
βy ⊕ x
end for
  

参考

     

轻量级分组密码的SIMON和SPECK系列   https://eprint.iacr.org/2013/404

我的问题是明文应该是字符串然后我转换为二进制或什么,并在上面的算法中使用它? 该算法没有说明文的类型,并且有示例加密

Key: 1918 1110 0908 0100
Plaintext: 6574 694c
Ciphertext: a868 42f2

1 个答案:

答案 0 :(得分:1)

SPECK 32/64密码需要4个字节作为输入。

  

明文:6574 694c

装置

byte[] plaintext = new byte[] {0x65, 0x74, 0x69, 0x4C};

其中使用0x前缀将每个字节指定为十六进制值。

您将在第一步中划分明文:

byte[] x = new byte[] {plaintext[0], plaintext[1]};
byte[] y = new byte[] {plaintext[2], plaintext[3]};

注意:使用一些更聪明的数组操作来加速你的密码,上面的例子仅用于教育目的。

注意2 :将输入视为uint可能是一种很好的方法,它可能比具有一点点魔力的数组快得多:

uint plaintext = 0x6574694C;
ushort x = (ushort) (plaintext >> 16);
ushort y = (ushort) plaintext;