alisolution Ответов: 1

Ардуино AES зашифрованные коды расшифровать в C#


Приветствие,

Я хочу коды, которые создают шифрование в Arduino-C и могут быть расшифрованы в c#.

возможно ли это ?

Используя алгоритм AES или любой другой algorthim

кто-нибудь мне поможет, может предоставить коды



ЭЙДЖЕЙ

Что я уже пробовал:

#include "AES.h"
#include "base64.h"

AES aes;

void setup() {
  
  Serial.begin(9600);
  Serial.println("\nBooting...");

  char b64data[200];
  byte cipher[1000];
  byte iv [N_BLOCK] ;

  Serial.println("Let's encrypt:");
  // Our AES key. Note that is the same that is used on the Node-Js side but as hex bytes.
  byte key[] = { 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 };

  // The unitialized Initialization vector
  //byte my_iv[N_BLOCK] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  byte my_iv[N_BLOCK] = { 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 };

  // Our message to encrypt. Static for this example.
  //String msg = "{\"data\":{\"value\":300}, \"SEQN\":700 , \"msg\":\"IT WORKS!!\" }";
  String msg = "ABC";


aes.iv_inc();
  aes.set_key( key , sizeof(key));  // Get the globally defined key


  // Print the IV
  base64_encode( b64data, (char *)my_iv, N_BLOCK);
  Serial.println(" IV b64: " + String(b64data));

  Serial.println("Message: " + msg );

  int b64len = base64_encode(b64data, (char *)msg.c_str(), msg.length());
  Serial.println (" Message in B64: " + String(b64data) );
  Serial.println (" The lenght is:  " + String(b64len) );
  
  // For sanity check purpose
  //base64_decode( decoded , b64data , b64len );
  //Serial.println("Decoded: " + String(decoded));

  // Encrypt! With AES128, our key and IV, CBC and pkcs7 padding
  aes.do_aes_encrypt((byte *)b64data, b64len , cipher, key, 128, my_iv);

  Serial.println("Encryption done!");

  Serial.println("Cipher size: " + String(aes.get_size()));

  b64len = base64_encode(b64data, (char *)cipher, aes.get_size() );
  Serial.println ("Encrypted data in base64: " + String(b64data) );

  Serial.println("Done...");
  String t="vVnzJGbo0IDNBywnkVxGXw==";
 //  b64len = base64_encode(b64data, (char *)t.c_str(), t.length());

  byte plain[1000];
  b64len = base64_decode(b64data, b64data, b64len);
 // aes.do_aes_decrypt((byte *)b64data, b64len, plain, key, 128, my_iv);
  test(t,key,my_iv,b64len);
  base64_decode(b64data, (char *)plain, aes.get_size());
  Serial.println (" Plain in B64: " + String((char *)plain) );
  Serial.println(" Plain size: " + String(aes.get_size()));
  Serial.println (" Decrypted data in base64: " + String(b64data) );
//  Serial.println ("Decrypted data: " + plain );
}
 /* void adecrypt(String msg, byte key1[], String my_iv) {
  
  aes.set_key(key1, sizeof(key1));
  char data_decoded[200];
  char iv_decoded[200];
  byte out[200];
  char temp[200];
  msg.toCharArray(temp, 200);
  int b64len = base64_decode(data_decoded, temp, msg.length());
  my_iv.toCharArray(temp, 200);
  base64_decode(iv_decoded, temp, my_iv.length());
  aes.do_aes_decrypt((byte *)data_decoded, b64len, out, key1, 128, (byte *)iv_decoded);
  
  char message[msg.length()];
  base64_decode(message, (char *)out, msg.length());
 // return String(message);
} */
void test(String msg, byte key1[], byte my_iv[],int b64len1)
{
 // aes.set_key(key1, sizeof(key1));
  char data_decoded[200];
  char iv_decoded[200];
  byte out[200];
  char temp[200];
  msg.toCharArray(temp, 200);
  int b64len = base64_decode(data_decoded, temp, msg.length());
//  my_iv.toCharArray(temp, 200);
  base64_decode(iv_decoded, temp, b64len1);
  aes.do_aes_decrypt((byte *)data_decoded, b64len, out, key1, 128, (byte *)iv_decoded);
  
  char message[msg.length()];
  base64_decode(message, (char *)out, msg.length());
   Serial.println (" Oyair aram data in base64: " + String(message) );
  }
void loop() {
  // put your main code here, to run repeatedly:
}

Kornfeld Eliyahu Peter

Непонятный...
Вы спрашиваете, можно ли расшифровать в C# то, что было зашифровано в C? Да, это так!
Или вы спрашиваете, что не так с вашим кодом? Откуда нам знать? Вы говорите нам, и мы можем сказать, почему!

alisolution

я сделал зашифрованный код упоминания в c-Arduino и хочу расшифровать его в c#
но когда мы пытаемся расшифровать его в c#, получаем другую ошибку

любой код или URL-адрес помощи.

с уважением
ЭЙДЖЕЙ

1 Ответов

Рейтинг:
1

OriginalGriff

Цитата:
я сделал зашифрованный код упоминания в c-Arduino и хочу расшифровать его в c#
но когда мы пытаемся расшифровать его в c#, получаем другую ошибку

Мы не можем помочь вам напрямую - слишком много переменных, и мы не можем запустить обе стороны вашего кода в одних и тех же обстоятельствах.
Поэтому первое, что вам нужно сделать, это выяснить, в чем проблема.
Начните с шифрования известного двоичного файла данных (сделайте его чем-то простым, например, просто буквами алфавита) на вашем компьютере, используя известный работающий алгоритм AES и определенный известный ключ. Повторите шифрование, используя тот же файл данных и ключ на вашем Arduino.
Сравните выходные файлы. Они идентичны? Если это так, то проблема, скорее всего, будет заключаться в вашем коде C#, и вам нужно попробовать ввести в него известный-хороший-вывод и посмотреть, что вы получите. Если это не так, проблема находится в конце Arduino, и вам нужно посмотреть, что именно вы там делаете.

Мы не можем сделать это для вас!