2016-11-17 121 views
2

同时努力实现密钥生成算法,我碰到下面的代码片段来了以下算法实现 算法产生一定的会话密钥IKE会话差Vs“ 2”

SKEYID_e = HMAC (SKEYID, SKEYID_a || gxy || CKY-I || CKY-R || 2)

实施拿到两位数的最后串联HMAC 2

hmac_update(ctx, (unsigned char *) "\2", 1)

这里hmac_update是用来连接的b中的API在完成摘要之前请先获取HMAC,CTX是HMAC上下文,“\ 2”是添加数字2,1是缓冲区的大小。

我的问题是,是什么区别逃到unsigned char *"\2"char/uint8_t2

回答

6

不同的是,与数字值2和字符串"\2"一个char在于,前者是一个char和第二个是一个常量,代表含有char与数字值2,然后一个char与数值0的字符阵列换句话说:

  • (char)2是一个单字符。它的类型是char。它的值是2.
  • "\2"是一个字符数组。它的类型衰减到const char*。其第一个条目是2和它的第二个输入为0。

由于hmac_update预计作为第二个参数的指针字节在更新使用,则不能提供2(char)2作为参数,因为这样做所以会尝试将整数转换为指针(oops)。使用"\2"通过提供指向所讨论字节的指针来解决此问题。你也可以做这样的事情:

const char value = 2; 
hmac_update(ctx, &value, 1); 
-1

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

+1

我不相信这回答OP的问题 - 他们问的“一个字符”与数值2“和”“2”之间的区别' ,而不是关于“字符”2“”和“字符”'2'“之间的区别。” – templatetypedef