gpt4 book ai didi

php - 使用 RC4 和 base64 保护 arduino 和 PHP 之间的通信

转载 作者:行者123 更新时间:2023-12-04 13:49:57 24 4
gpt4 key购买 nike

我正在尝试在 Arduino 和 PHP 之间进行适度安全的通信。由于 Arduino 电源不足,我无法使用 SSL。所以我想使用 RC4 来加密来自 PHP 的数据,然后接收到 Arduino 并解密。还从 Arduino 加密并发送到 PHP。

问题是从 PHP 发送的加密数据,在 Arduino 中不一致。

在 PHP 上,我在 base64 中获得 HesshwkfFk8Q,在 Arduino 中我在 base64 中获得 nZcwrlpZEr0V。
当它们应该相等时不同的结果。

我想我有一个错误的 Arduino RC4 实现。我正在使用这个 https://github.com/adamvr/arduino-base64

这是代码:

阿杜诺

#include <Base64.h>

unsigned char S[256];
char has[512];

#define S_SWAP(a,b) do { int t = S[a]; S[a] = S[b]; S[b] = t; } while(0)

void rc4(char *key, char *data){
int i,j;

for (i=0;i<256;i++){
S[i] = i;
}

j = 0;
for (i=0;i<256;i++){
j = (j+S[i]+key[i%strlen(key)]) %256;
S_SWAP(S[i],S[j]);
}

i = j = 0;
for (int k=0;k<strlen(data);k++){
i = (i+1) %256;
j = (j+S[i]) %256;
S_SWAP(S[i],S[j]);
has[k] = data[k]^S[(S[i]+S[j]) %256];
}
has[strlen(data)+1] = '\0';

}

void setup() {
Serial.begin(9600);
char key[] = "Hello";
char sdata[] = "secretMsg";

rc4(key,sdata);
Serial.print("Encrypted : ");

char out[100];
base64_encode(out,has,strlen(has));
Serial.println(out);

char out2[100];
base64_decode(out2,out,strlen(out));

rc4(key,out2);
Serial.print("Decrypted : ");

Serial.println(has);

}

void loop(){

}

PHP

  <?php  
$key = 'Hello';
$msg = 'secretMsg';
$encrypted = rc4_crypt($key, $msg);

echo 'encrypted b64: ', base64_encode($encrypted) ,'<br>';
echo "decrip: " , rc4_decrypt($key,rc4_crypt($key, $msg));
exit;


function rc4_crypt($key,$msg) {
$td = mcrypt_module_open('arcfour', '' , 'stream', '');
mcrypt_generic_init($td, $key, null);
$encrypted = mcrypt_generic($td, $msg);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return $encrypted;
}

function rc4_decrypt($key,$msg) {
return rc4_crypt($key,$msg);
}
?>

最佳答案

我遇到了同样的问题,我可以向您确认您在 Arduino 中的 RC4 函数是错误的,您可以改用它:

unsigned char S[256];
unsigned int i, j;

void swap(unsigned char *s, unsigned int i, unsigned int j) {
unsigned char temp = s[i];
s[i] = s[j];
s[j] = temp;
}

/* KSA */
void rc4_init(unsigned char *key, unsigned int key_length) {
for (i = 0; i < 256; i++)
S[i] = i;

for (i = j = 0; i < 256; i++) {
j = (j + key[i % key_length] + S[i]) & 255;
swap(S, i, j);
}

i = j = 0;
}

/* PRGA */
unsigned char rc4_output() {
i = (i + 1) & 255;
j = (j + S[i]) & 255;

swap(S, i, j);

return S[(S[i] + S[j]) & 255];
}

关于php - 使用 RC4 和 base64 保护 arduino 和 PHP 之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18727367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com