python 中比特流数据的 AES 128 位加密
AES 128 bit encryption of bitstream data in python
我正在尝试加密比特流数据或基本上像这样的二进制数据列表 [1,0,1,1,1,0,0,1,1,0,1,1,0,1 ] 在 python 中使用块大小为 128 位的 AES 加密,问题是我希望输出也为二进制数据并且与原始二进制数据列表大小相同,这可能吗?我该怎么做?
是的,基本上有两种方式:
你有一个与数据相关联的唯一值(例如,如果它们按顺序提供,那么你可以创建一个序列号)然后你可以简单地使用唯一值作为随机数,然后使用 AES计数器模式加密。计数器模式不会扩展数据,但如果不提供随机数,它是不安全的。请注意,您在解密时确实需要随机数。
您使用保留格式的加密或 FPE,例如 NIST 定义的 FF1 和 FF3。这种方法存在一些问题:
- 如果输入数据量很少(就像您的情况一样),这些算法就会出现问题;
- FF1 和 FF3 的实现通常很难找到;
- 如果您有两个唯一的位值,那么它们将产生相同的密文。
这些方案都没有明显提供数据的完整性或真实性,而且根据定义,它们会泄露明文的大小。
我正在尝试加密比特流数据或基本上像这样的二进制数据列表 [1,0,1,1,1,0,0,1,1,0,1,1,0,1 ] 在 python 中使用块大小为 128 位的 AES 加密,问题是我希望输出也为二进制数据并且与原始二进制数据列表大小相同,这可能吗?我该怎么做?
是的,基本上有两种方式:
你有一个与数据相关联的唯一值(例如,如果它们按顺序提供,那么你可以创建一个序列号)然后你可以简单地使用唯一值作为随机数,然后使用 AES计数器模式加密。计数器模式不会扩展数据,但如果不提供随机数,它是不安全的。请注意,您在解密时确实需要随机数。
您使用保留格式的加密或 FPE,例如 NIST 定义的 FF1 和 FF3。这种方法存在一些问题:
- 如果输入数据量很少(就像您的情况一样),这些算法就会出现问题;
- FF1 和 FF3 的实现通常很难找到;
- 如果您有两个唯一的位值,那么它们将产生相同的密文。
这些方案都没有明显提供数据的完整性或真实性,而且根据定义,它们会泄露明文的大小。