在密码学中使用字节数组和十六进制值

时间:2012-03-21 08:01:54

标签: cryptography hex bytearray

当我们使用密码术时,我们总是看到正在使用字节数组而不是字符串值。但是当我们查看大多数加密算法的技术时,他们使用十六进制值来执行任何操作。例如。 AES:MixColumns,SubBytes所有这些技术(我猜它使用)使用十六进制值来执行这些操作。
你能解释一下这些字节数组在这些操作中如何用作十六进制值。

我有一个开发加密算法的任务,因此任何相关的示例代码都是合适的。

4 个答案:

答案 0 :(得分:1)

二进制的每四位数字都是十六进制数字,因此,您可以很容易地来回转换(参见:http://en.wikipedia.org/wiki/Hexadecimal#Binary_conversion)。

但是,我不认为我完全明白你在问什么。

答案 1 :(得分:1)

了解十六进制最重要的是它是一个表示数值的系统,就像二进制或十进制一样。它只不过是符号。您可能知道,许多计算机语言允许您以几种不同的方式指定数字文字:

int a = 42;
int a = 0x2A;

这些值将相同的值存储到变量“a”中,编译器应为它们生成相同的代码。这两行之间的差异将在编译过程中很早就会丢失,因为编译器会关注您指定的,而不是您过去常常关注的表示将其编码在源文件中。

主要内容:没有“十六进制值”这样的东西 - 只有十六进制表示值。

所有人都说,你也谈论字符串值。显然42!=“42”!=“2A”!= 0x2A。如果你有一个字符串,你需要在用它进行任何计算之前将它解析为数值。

答案 2 :(得分:0)

字节,字节数组和/或内存区域通常显示在IDE(集成开发环境)中,调试器显示为十六进制。这是因为它是字节最有效和最清晰的表示。对于有经验的程序员来说,很容易将它们转换成位(在他的脑海中)。例如,您可以清楚地看到XOR和换档的工作原理。这些(和附加)是进行对称加密/散列时最常见的操作。

所以程序不太可能执行这种转换,它可能是您所在的环境。那和源代码(在编译时转换为字节)时间)也可能以十六进制表示法使用大量文字

答案 3 :(得分:0)

除了散列函数之外,一般来说,密码术是一种将数据从一种格式转换为另一种格式的方法,主要使用密钥称为密文。可以将密钥应用于密文以获得也称为纯文本的原始数据。在此过程中,数据以字节级别进行处理,但也可以是位级别。这里指出我们所指的文本或字符串在一个字节的有限范围内。示例ASCII在字节值0到255的某个范围内定义。实际上,当执行加密操作时,字符将转换为等效字节,并使用密钥执行该过程。现在结果字节或字节很可能超出人类可读定义文本的范围,如ASCII编码等。因此,需要应用加密函数的任何数据首先转换为字节数组。例如,要加密的文本是“你好,你好吗?” 。应遵循以下步骤: 1. byte [] data =“你好,你好吗?”。getBytes() 2.使用也是byte []的密钥对数据进行加密处理 输出blob称为cipherTextBytes []。 4.加密完成 5.使用Key [],在cipherTextBytes []上执行一个进程,返回数据字节 6一个简单的新String(data [])将返回Hellow的字符串值,你是怎么做的。

这是一个简单的信息,可以帮助您更好地理解参考代码和手册。我绝不想在这里向你解释密码学的核心。