2与“\ 2”

时间:2016-11-17 18:51:24

标签: c security ipsec

在尝试实现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_t2

之间的区别是什么?

2 个答案:

答案 0 :(得分:6)

不同之处在于,数字值为2的char和字符串"\2"是前者是char,第二个是表示包含{{{0}的字符数组的文字。 1}}数字值为2,然后是char,数值为0.换句话说:

  • char是一个字符。它的类型是(char)2。它的值是2。
  • char是一个字符数组。它的类型衰减到"\2"。它的第一个条目是2,第二个条目是0。

由于const char*期望第二个参数是指向要在更新中使用的字节的指针,因此您不能提供hmac_update2作为参数,因为这样做会尝试将整数转换为指针(oops)。使用(char)2通过提供指向相关字节的指针来解决此问题。你也可以这样做:

"\2"

答案 1 :(得分:-1)

“2”描述带有十六进制代码2的字符(这是一个不可打印的字符,请检查http://ascii-table.com/info.php?u=x0002);
数字“2”的十六进制代码为0x050 = 50,可打印字符为“2”。