LoRaWAN 协议具有加密数据的特定方式(第 20 页,第 4.3.3.1 章),我正在尝试在 C# 中执行此操作。
首先,创建一个序列 A,其中每个块的大小为 16 字节A1..An
。然后将它们加密以获得一系列S
块Si
:
Si = aes128_encrypt(K, Ai) for i = 1..n
S = S1 | S2 | .. | Sn
最后对有效载荷进行加密:
(pld | pad16) xor S
truncation of the first len(payload) bytes
到目前为止,我设法生成了这些块,但我是密码学新手,不知道如何进行,有人可以帮忙吗?
这是我到目前为止的 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 };
\\...