在 C++ 中处理分组密码的最佳方法? (加密货币++)

发布于 2024-07-06 01:52:56 字数 266 浏览 5 评论 0 原文

我对 C++ 和块密码加密都很陌生,目前正在为 AES(16 字节种子/16 字节块)编写解密函数。 一切都很顺利,但我的总数据大小并不总是我的块大小的倍数。 我想知道处理数据末尾剩余数据的最佳方法是什么。

我正在使用 Crypto++ 作为 AES 库。

ProcessBlock() 函数采用输入和输出字符数组。 我假设它们至少与块大小足够大。

处理分组密码中的所有 16 字节块,然后处理剩余数据的最佳方法是什么?

I'm pretty new to both C++ and Block Cipher encryption, and I am currently in the process of writing a decryption function for AES (16 byte seed / 16 byte blocks). All is going well, but my total data size is not always a multiple of my block size. I'm wondering what the best way to handle leftover data at the end of my data.

I'm using Crypto++ for the AES library.

The ProcessBlock() function takes an Input and Output char array. I'm assuming it is expecting them to be at least big enough as the block size.

What would be the best way to process all 16 byte blocks in a block cipher, and then also process the leftover data?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

还不是爱你 2024-07-13 01:52:57

你想要的是一个填充系统。

查看这篇关于 Crypto++ 的 CodeProject 文章

当消息不是以下的倍数时
密码的块大小、ECB 或 CBC
模式消息必须被填充。 这
填充的方法和值是
问题的根源
密码学之间的互操作性
库和 API。 饰演 加斯·兰卡斯特
指出,如果您不知道
填充的细节,使用
流转换过滤器。 在这个
在这种情况下,Crypto++ 过滤器将填充
你。

What you want is a padding system.

Check out this CodeProject article on Crypto++:

When a message is not a multiple of
the cipher's block size, ECB or CBC
mode messages must be padded. The
method and values of padding are a
source of problem with respect to
interoperability between Cryptographic
libraries and APIs. As Garth Lancaster
points out, if you're not aware of the
particulars of padding, use the
StreamTransformationFilter. In this
case, the Crypto++ filter will pad for
you.

小伙你站住 2024-07-13 01:52:57

有一个所谓的“填充”的 PKCS 标准,

请参阅 wikipedia 页面,但它相当于用以下之一进行填充:

 01
 02 02
 03 03 03
 04 04 04 04
 05 05 05 05 05

这样您就可以在解密过程中知道原始消息的结尾位置...

There's a PKCS standard for what's called "padding"

See the wikipedia page, but it amounts to padding with one of:

 01
 02 02
 03 03 03
 04 04 04 04
 05 05 05 05 05

This way you know during decryption where the original message ends...

┼── 2024-07-13 01:52:56

这不仅仅是填充——您需要一种操作模式。 好数学,坏数学博客正在撰写一个关于它们是什么以及如何使用它们的精彩系列 维基百科条目。 有一件事非常非常重要:永远不要使用 ECB(电子密码本)模式 - 在该模式下独立加密每个块。 这是显而易见的方法,但它提供的安全性却极差。

但理想情况下,您甚至不必亲自执行此操作。 您的加密库应该提供它。 如果没有,我建议换成其他的。 像 OpenSSL 一样。

It's more than just padding - you need a Mode of Operation. The Good Math, Bad Math blog is writing up an excellent series on what they are and how to use them here. Also see the wikipedia entry. One thing that's really, really important: Never, ever use ECB (Electronic Code Book) mode - where you encrypt each block independently. It's the obvious way to do it, but it provides appallingly poor security.

Ideally, though, you shouldn't even have to do this yourself. Your crypto library should provide it. If it doesn't, I'd suggest changing to something else. like OpenSSL.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文