c# – 如何在.NET中复制蓝牙的CCM方案?
我正在研究固件更新方案,该方案需要对固件映像进行端到端加密.目标设备是蓝牙低功耗芯片,硬件支持Blueooth Spec,AES-CCM中指定的加密技术.我们希望利用此硬件来最小化代码大小和速度,因此我们需要以构建硬件的格式加密固件映像.
因此,我正在尝试使用.NET的AesManaged class,以便我可以重现Bluetooth Spec(p 1547)中给出的数据样本,但我没有得到相同的输出.这是示例数据:
现在,我很高兴只是在没有身份验证的情况下使加密工作.我注意到MIC和加密有效载荷分别与S0和S1进行了T和Payload XOR,因此我的目标只是生成S0.我的理解是,我应该能够通过ECB使用密钥K来执行CTR0数组: //I've tried a few endian-ness permutations of K,none work byte[] sampleKey = { 0x23,0x45,0x23,0x67,0x89,0x89}; byte[] sampleCtr0 = { 01,0x4e,0x61,0xbc,00,0xdd,0xcc,0xbb,0xaa,0x99,0x88,0x77,0x66,00 }; byte[] encrypted; using (AesManaged aesAlg = new AesManaged()) { aesAlg.Mode = CipherMode.ECB; //CTR implemented as ECB w/ manually-incrementing counter // Create an encrytor to perform the stream transform. ICryptoTransform encryptor = aesAlg.CreateEncryptor(sampleKey,zeros); //zeros is a byte array of 16 0's // Create the streams used for encryption. using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt,encryptor,CryptoStreamMode.Write)) { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { //Write all data to the stream. swEncrypt.Write(sampleCtr0); } encrypted = msEncrypt.ToArray(); } } } 我希望看到加密的S0,但我没有.怎么了? 解决方法
事实证明使用StreamWriter是个问题.删除它并用csEncrypt.Write()替换它,我得到了我的预期输出.
我仍然不理解我的修复,所以我即将编辑这个问题,但看到问题可能与加密无关,我认为这将作为一个单独的问题更好地解决.或者,如果有人可以解释修复,我会更改已接受的答案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |