【问题标题】:Difference between 2 vs "\2"2 与“\2”之间的区别
【发布时间】:2016-11-17 18:51:23
【问题描述】:

在尝试实现 IKE 会话密钥生成算法时,我遇到了以下代码 sn-ps 用于以下算法实现 生成某个会话密钥的算法

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之间有什么区别

【问题讨论】:

    标签: c security ipsec


    【解决方案1】:

    不同之处在于,char 的数值为 2,而字符串 "\2" 是前者是 char,第二个是一个字面量,表示一个字符数组,其中包含一个数值为 2 的 char 和然后是char,数值为0。换句话说:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我不相信这能回答 OP 的问题——他们问的是“a char with numeric value 2` 和 "\2" 之间的区别,而不是关于“字符'2'”和“角色'\2'。”
      猜你喜欢
      • 2017-06-14
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多