3

LoRaWAN 协议具有加密数据的特定方式(第 20 页,第 4.3.3.1 章),我正在尝试在 C# 中执行此操作。

首先,创建一个序列 A,其中每个块的大小为 16 字节A1..An。然后将它们加密以获得一系列SSi

Si = aes128_encrypt(K, Ai) for i = 1..n
S = S1 | S2 | .. | Sn

最后对有效载荷进行加密:

(pld | pad16) xor S
truncation of the first len(payload) bytes

到目前为止,我设法生成了这些块,但我是密码学新手,不知道如何进行,有人可以帮忙吗?

这是python中的加密脚本。

这是 js 中的加密脚本

这是c ++中的加密脚本。

这是我到目前为止的 C# 代码:

public string encrypt(string payload, string dev_eui, string dev_addr, int counter_up)
{
  try
  {
    byte[] devaddr = StringToByteArray(dev_addr);
    byte[] aBlock = {
      0x01,
      0x00,
      0x00,
      0x00,
      0x00,
      0,
      devaddr[3],
      devaddr[2],
      devaddr[1],
      devaddr[0],
      (byte)(counter_up & 0xff),
      (byte)((counter_up >> 8) & 0xff),
      (byte)((counter_up >> 16) & 0xff),
      (byte)((counter_up >> 24) & 0xff),
      0x00,
      0x00 };

     \\...
4

0 回答 0