You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#开发Web应用时YubiKey OTP Slot1编程的访问码长度异常问题求助

解决YubiKey OTP Slot访问码长度限制问题

我来帮你搞定这个YubiKey编程的问题!核心问题出在访问码的字节长度不匹配——YubiKey要求访问码最多6字节,但你把7位序列号转成ASCII字符串后得到了7字节,直接触发了API的长度限制错误。

为什么会报错?

YubiKey的Slot访问码是6字节以内的二进制值,而你通过Encoding.ASCII.GetBytes(_yubiKey.SerialNumber.ToString())把7位数字转成ASCII字符串时,每个数字对应1字节,最终得到7字节的数组,超出了API允许的最大长度,所以Execute()会抛出"Access code must be 6 or fewer bytes."的错误。

正确的访问码生成方式

既然你之前是用序列号作为访问码保护Slot1,那需要把序列号数值转换成6字节的二进制数组,而不是直接转字符串。这样既能保证长度符合要求,又能和你之前设置的访问码匹配(前提是你之前也是用这种方式生成的访问码)。

修改后的代码示例

try { 
    // 直接在using中初始化OtpSession,避免重复实例化
    using (OtpSession otp = new OtpSession(_yubiKey)) { 
        Memory<byte> hmac_key = Generate_Seed(); 
        
        // 将序列号转换为6字节的二进制数组(大端字节序,符合YubiKey习惯)
        long serialNumber = _yubiKey.SerialNumber;
        byte[] accessCodeBytes = new byte[6];
        for (int i = 5; i >= 0; i--)
        {
            accessCodeBytes[i] = (byte)(serialNumber & 0xFF);
            serialNumber >>= 8;
        }
        Memory<byte> serial_number = accessCodeBytes;
        
        SlotAccessCode access_code = new SlotAccessCode(serial_number); 

        otp.ConfigureHotp(Slot.ShortPress) 
            .UseCurrentAccessCode(access_code) 
            .AppendCarriageReturn(true) 
            .UseNumericKeypad(true) 
            .UseKey(hmac_key) 
            .Execute(); 
    } 
} catch (Exception ex) { 
    if (ex.ToString().Contains("YubiKey Operation Failed [Warning, state of non-volatile memory is unchanged.]")) 
        lblMessage.Text = "YubiKey could not be configured. Please use the proper access code."; 
}

额外提醒

  • 如果之前你设置访问码时用的是序列号字符串的前6位ASCII,那上面的代码就不匹配了——这种情况下你需要改成取序列号字符串的前6位转成ASCII,比如Encoding.ASCII.GetBytes(_yubiKey.SerialNumber.ToString().Substring(0,6)),但更推荐用二进制转换的方式,因为ASCII方式容易受数字长度变化影响。
  • 注意字节序:YubiKey的访问码通常使用大端字节序,上面的代码通过从后往前填充数组实现了大端转换,确保数值正确映射。

内容的提问来源于stack exchange,提问作者Dennis Robare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 18:44:07