DRBG_InstantiateSeeded-DfStart-DRBG_ENCRYPT_SETUP
创始人
2025-06-01 01:23:47
0

rd_key  0x3b +1 0x3c =   60

60个int = 240字节

rounds 是 0e = 14

 初始密钥值:

000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

#define DRBG_ENCRYPT_SETUP(key, keySizeInBits, schedule)        \
    TpmCryptSetEncryptKeyAES(key, keySizeInBits, schedule)

/* B.2.2.3.3.    Links to the OpenSSL AES code */
/* Macros to set up the encryption/decryption key schedules */

#define TpmCryptSetEncryptKeyAES(key, keySizeInBits, schedule)        \
    AES_set_encrypt_key((key), (keySizeInBits), (tpmKeyScheduleAES *)(schedule))

// Table 1:17 - Defines for AES Symmetric Cipher Algorithm Constants
#define AES_KEY_SIZES_BITS                        \
    (128 * AES_128), (192 * AES_192), (256 * AES_256)
#if   AES_256
#   define AES_MAX_KEY_SIZE_BITS    256
#elif AES_192
#   define AES_MAX_KEY_SIZE_BITS    192
#elif AES_128
#   define AES_MAX_KEY_SIZE_BITS    128
#else
#   define AES_MAX_KEY_SIZE_BITS    0

#define tpmKeyScheduleAES           AES_KEY

32字节的key 

 初始密钥值:

000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f

/* Macros to alias encryption calls to specific algorithms. This should be used
   sparingly. Currently, only used by CryptSym.c and CryptRand.c */
/* When using these calls, to call the AES block encryption code, the caller should use:
   TpmCryptEncryptAES(SWIZZLE(keySchedule, in, out)); */

#define TpmCryptEncryptAES          AES_encrypt
#define TpmCryptDecryptAES          AES_decrypt
#define tpmKeyScheduleAES           AES_KEY

AES_encrypt(3) - OpenBSD manual pages

AES_KEY is a structure that can hold up to 60 int values and a number of rounds.

AES_set_encrypt_key() expands the userKey, which is bits long, into the key structure to prepare for encryption. The number of bits and bytes read from userKey, the number of int values stored into key, and the number of rounds are as follows:

bitsbytesintsrounds
128164410
192245212
256326014

AES_KEY 是一个结构,最多可以容纳 60 个 int 值和多个轮次。

AES_set_encrypt_key()将多位的userKey展开成密钥结构,为加密做准备。 从userKey读取的bits和bytes个数,存入key的int值个数,轮数如下:

位字节整数轮
128 16 44 10
192 24 52 12
256 32 60 14    14轮

   

AES_set_decrypt_key() does the same, but in preparation for decryption.

AES_encrypt() reads a single 16 byte block from *in, encrypts it with the key, and writes the 16 resulting bytes to *out. The 16 byte buffers starting at in and out can overlap, and in and out can even point to the same memory location.

AES_decrypt() decrypts a single block and is otherwise identical to AES_encrypt().

If enc is non-zero, AES_cbc_encrypt() encrypts len bytes at in to out using the 128 bit key and the 128 bit initialization vector ivec in CBC mode. If enc is 0, AES_cbc_encrypt() performs the corresponding decryption.

AES_set_decrypt_key() 做同样的事情,但准备解密。

AES_encrypt() 从 *in 中读取单个 16 字节块,使用密钥对其进行加密,并将 16 个结果字节写入 *out。 从 in 和 out 开始的 16 字节缓冲区可以重叠,in 和 out 甚至可以指向相同的内存位置。

AES_decrypt() 解密单个块,其他方面与 AES_encrypt() 相同。

如果 enc 不为零,AES_cbc_encrypt() 在 CBC 模式下使用 128 位密钥和 128 位初始化向量 ivec 加密从 in 到 out 的 len 个字节。 如果 enc 为 0,则 AES_cbc_encrypt() 执行相应的解密。

OpenSSL AES 加密 与 java 对齐需要注意的几点_恋恋西风的博客-CSDN博客

以下接口来自“crypto/aes/aes.h”,有openssl源码。
//设置加密和解密器
int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
AES_KEY *key);
int AES_set_decrypt_key(const unsigned char *userKey, const int bits,
AES_KEY *key);
 

下面这个文件可以看出, AES_encrypt 就是ecb加密的方式。而AES_set_encrypt_key和 AES_encrypt,它们的实现在"crypto/aes/aes_x86core.c"和 "crypto/aes/aes_core.c",也就是有两个版本,根据平台选择。看源码。
 

 DfStart 调用到了 openssl中的 AES_set_encrypt_key

DfUpdate 、  DfEnd  调用到了 openssl中的 AES_encrypt 

开源java实现:

GitHub - GreateLi/openssl_aes_windows: openssl aes windows JAVA AES/CBC/PKCS5Padding ; C++ AES_CBC_PKCS5Padding

相关内容

热门资讯

向往的生活 传祺向往S7智趣家... 以露营之名,探寻人生每一种与众不同的意义,6月1日,在这个充满活力的初夏,【向往的生活 传祺向往S7...
新场景新业态层出不穷 文旅“玩... 来源:央视网央视网消息: 这个端午假期,形式丰富的文化演出在满足群众假日文化需求的同时,也为文旅融合...
河南人的鱼头酒,从头到尾108... 在河南的酒桌文化中,有一种极具特色的饮酒习俗——“鱼头酒”,甚至衍生出“鱼头酒108杯”的说法。 这...
家常炖燕鱼:简单美味,轻松享受... 在家里做饭,很多人都会追求简单又美味的菜肴。今天,我想和大家分享一种简单易学的炖燕鱼的家常做法。燕鱼...
不是鱼却很补脑,这个优质蛋白被... ⚬ 小管鱿鱼(北方人称其为“海兔”“笔管”)——这种细长如火箭的夏日小海鲜,蛋白质堪比牛肉,脂肪却不...
“水果夹酸奶”风靡长沙,湘菜馆... 文/视频 三湘都市报全媒体记者 仝若楠 继“干噎酸奶”火爆全网后,“水果夹酸奶”又成为近期又一出圈甜...
2025年零食饮料趋势白皮书-... 今天分享的是:2025年零食饮料趋势白皮书-Flywheel飞未 报告共计:90页 《2025年零食...
恒顺健康新品闪耀大阪世博 非遗... 扬子晚报网6月2日讯(通讯员 杨永忠 王娜 记者 万凌云) 端午节前,2025年日本大阪世博会中国馆...
中国十大硬菜 要说中国菜里那些镇得住场子的"硬角色",可不是随便什么菜都能上榜的。这些硬菜要么得有排面,要么得有功...
苏州柏悦酒店五周年庆典:四城名... 为庆祝苏州柏悦酒店开业五周年,一场以“吾载岁悦”为主题的美食美酒晚宴于5月29日璀璨开幕。晚宴特邀知...
潮声丨旅居的魅力,哪里最知道? 潮新闻客户端 执笔 陶韬 去“有风的地方”吹散疲惫,去“有水的村寨”肆意欢笑,到“有篝火的村庄”围炉...
魅力潮汕五日游攻略:探索潮汕旅... 潮汕五日,邂逅山海人文之美 在祖国大陆的南端,有一片神奇而迷人的土地——潮汕。这里,湛蓝的海水与金...
端午假期,阳江这里热!热!热! 今年端午假期恰逢儿童节 传统文化与童趣时光的奇妙邂逅 为海陵岛旅游市场注入全新活力 随着“传统文化+...
游客拍到九寨沟6月飘雪,导游:... 极目新闻记者 谢茂 6月2日,多位前往四川九寨沟旅游的游客发视频称,前往景区途中偶遇下雪,景色绝美。...
旅居云南·AI了爱了丨云南小菌... 云南小菌主旅居云南推荐官我是云南的 “小菌主”,妥妥的一枚山野小精灵!说到我的家乡云南,那可是拥有超...
贵州大礼包叠加升级! 5月30日,记者从省政府新闻办新闻发布会获悉,今年贵州为让更多游客与旅游企业享受优惠,开展全年景区门...
甘南,你为什么把「诗和远方」藏... 甘南,你为什么把「诗和远方」藏得这么深?附 6 个治愈到哭的小众角落!在青藏高原的东缘,有一片宛如世...
双飞去黄山旅游三天两晚需要多少... 黄山,作为中国著名的风景名胜区,以其奇松、怪石、云海、温泉四绝闻名于世,一直是众多游客向往的旅游胜地...
甘南的夏天太犯规!草原花海 +... 个藏族自治州之一,属于安多藏区的核心区域,也是藏、汉文化的交汇带,有着丰富的宗教历史和迷人的人文魅力...
四川九寨沟峨眉山旅游旅行团五天... 深入四川:九寨沟与峨眉山五天四晚的奇妙之旅 四川旅游推荐!当地导游-乐乐:185 8335 5758...