您如何在代码中表示x位密钥?

时间:2019-05-03 20:19:29

标签: encryption cryptography key bit

我对术语x位密钥有一个基本的误解。我正在编码x位输入的密码(TEA,OFB模式)。但是我如何用代码表示它。我使用哪种变量来包含这些数字。

例如4位密钥。我了解这意味着16种不同的可能性等。那么这是否意味着我从字面上接受只有1和0的4个整数的整数?我也知道字节变量。但这如何发挥作用。可以请一些友善的灵魂

1 个答案:

答案 0 :(得分:0)

密钥通常是8的倍数,因为计算机使用8位字节或八位字节作为最小量的可寻址信息。因此,现代对称密码的128位密钥包含128/8 = 16个字节的数据。因此,软件中的密钥通常以字节数组形式提供,其中每个字节可以具有256个可能值中的每一个。

在较低级别,通常使用32或64位字对密码进行编程。因此,有时必须将密钥作为该大小的单词传递。通常,使用更高级别的接口将字节转换为内部使用的单词,因此您不会在接口外部看到键的单词表示形式。

面向对象的实现通常需要围绕字节的对象包装。同样,您可以在硬件中进行密钥和密码操作。在那种情况下,可以使用键引用,通常由包含引用的对象或C数据结构表示。在那种情况下,硬件处理字节和/或字。 Java SecretKey接口可以表示硬件密钥或软件密钥(可以通过使用SecretKeySpec创建,该密钥以字节数组作为参数)。

四位密钥不代表任何可行的安全级别。您可以使用字节的任意4位(通常是最低有效4位)来表示它。或者,您可以使用整数的低4位。但是如前所述,4位没有任何意义,大多数键是8位甚至32位的倍数,使事情变得简单。


非对称密钥(例如RSA或基于椭圆曲线的密钥)是完全不同的野兽。这些密码系统基于整数算术而不是位运算。密钥大小由密码系统中的值之一确定。例如,对于RSA密钥,使用模数大小的大小。由于这些键通常由多个值组成,因此需要将它们编码为(最好是标准化的)数据结构。当然,该数据结构通常大于键的大小,因为定义键的值通常是键的一部分。