小编use*_*479的帖子

什么加密方案满足十进制明文和密文的要求并保留长度?

我需要一种加密方案,其中明文和密文完全由十进制数字组成.

另外,明文和密文的长度必须相同.

底层加密算法也应该是行业标准.我不介意它是对称的(例如AES)还是非对称的(例如RSA) - 但它必须是一个公认的算法,我可以获得一个FIPS-140批准的库.(否则它将无法通过安全审查阶段).

使用AES OFB可以保留基于十六进制的输入的长度(即每个字节有256个可能的值:0x00 - > 0xFF).但是,这对我来说不起作用,因为明文和密文必须完全是十进制的.

注意:"完全小数"可以用两种方式解释 - 这两种方式都可以满足我的要求:

  1. 输入和输出字节是字符'0' - >'9'(即字节值:0x30 - > 0x39)
  2. 输入和输出字节有100(十进制)值:0x00 - > 0x99(即BCD)

更多信息:最大明文和密文长度可能是10个十进制数字.(即如果使用'0' - >'9'则为10个字节,如果使用BCD则为5个字节)

请考虑以下示例以了解AES失败的原因:输入字符串是8位数字.最大8位数字是:99999999在十六进制中,这是:0x5f5e0ff

这可以视为4个字节:<0x05> <0xf5> <0xe0> <0xff>

如果我使用AES OFB,我将得到4字节输出.

最高可能的4字节密文输出为<0xFF> <0xFF> <0xFF> <0xFF>

将其转换回整数给出:4294967295即10位数字.

==>两位数太长.

最后一件事 - 所需的任何键/ IV的长度没有限制.

c++ encryption cryptography aes

7
推荐指数
1
解决办法
2837
查看次数

BITCOUNT宏所需的说明

谁能解释一下这是如何工作的?

#define  BX_(x)         ((x) - (((x)>>1)&0x77777777)                    \
                             - (((x)>>2)&0x33333333)                    \
                             - (((x)>>3)&0x11111111))


#define BITCOUNT(x)     (((BX_(x)+(BX_(x)>>4)) & 0x0F0F0F0F) % 255)
Run Code Online (Sandbox Code Playgroud)

澄清:

理想情况下,答案将从以下方面开始:

宏:"BX_"从传入的数字中减去三个值.

这三个值代表:

  1. XXXXX
  2. YYYYY
  3. ZZZZZ

这允许BITCOUNT()按如下方式工作......

干杯,

大卫

c c++ macros

4
推荐指数
1
解决办法
816
查看次数

标签 统计

c++ ×2

aes ×1

c ×1

cryptography ×1

encryption ×1

macros ×1