首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试实现Speck32 32/64分组密码

尝试实现Speck32 32/64分组密码
EN

Stack Overflow用户
提问于 2015-12-22 10:26:56
回答 1查看 1.1K关注 0票数 2

我试图在c#中实现Speck 32/64块密码,我坚持加密解密算法。我知道我应该按照算法把纯文本分割成两个字。

代码语言:javascript
复制
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

参考文献 轻型分组密码https://eprint.iacr.org/2013/404的SIMON和SPECK家族

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

代码语言:javascript
复制
Key: 1918 1110 0908 0100
Plaintext: 6574 694c
Ciphertext: a868 42f2
EN

回答 1

Stack Overflow用户

发布于 2015-12-22 12:09:29

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

明文: 6574 694 c

手段

代码语言:javascript
复制
byte[] plaintext = new byte[] {0x65, 0x74, 0x69, 0x4C};

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

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

代码语言:javascript
复制
byte[] x = new byte[] {plaintext[0], plaintext[1]};
byte[] y = new byte[] {plaintext[2], plaintext[3]};

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

Note 2:将输入作为一个uint处理可能是一种很好的方法,它可能比有一点点位魔法的数组快得多:

代码语言:javascript
复制
uint plaintext = 0x6574694C;
ushort x = (ushort) (plaintext >> 16);
ushort y = (ushort) plaintext;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34413606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档