在尝试实现IKE会话密钥生成算法时,我遇到了以下代码片段,用于以下算法实现 生成某个会话密钥的算法
SKEYID_e = HMAC (SKEYID, SKEYID_a || gxy || CKY-I || CKY-R || 2)
实现获取数字2的最后连接HMAC
hmac_update(ctx, (unsigned char *) "\2", 1)
这里hmac_update是用于在最终确定摘要之前连接缓冲区以获取HMAC的API,而CTX是HMAC上下文“\ 2”正在添加数字2,而1是缓冲区的大小。
我的问题是unsigned char *
"\2"
和char
/ uint8_t
值2
答案 0 :(得分:6)
不同之处在于,数字值为2的char
和字符串"\2"
是前者是char
,第二个是表示包含{{{0}的字符数组的文字。 1}}数字值为2,然后是char
,数值为0.换句话说:
char
是一个字符。它的类型是(char)2
。它的值是2。char
是一个字符数组。它的类型衰减到"\2"
。它的第一个条目是2,第二个条目是0。由于const char*
期望第二个参数是指向要在更新中使用的字节的指针,因此您不能提供hmac_update
或2
作为参数,因为这样做会尝试将整数转换为指针(oops)。使用(char)2
通过提供指向相关字节的指针来解决此问题。你也可以这样做:
"\2"
答案 1 :(得分:-1)
“2”描述带有十六进制代码2的字符(这是一个不可打印的字符,请检查http://ascii-table.com/info.php?u=x0002);
数字“2”的十六进制代码为0x050 = 50,可打印字符为“2”。