//-------------------------------------------------------------- // 簡単なXOR暗号 '22.01.31 naka // 実行例) // key :Open Sesame // // plain_ssid :WiFi_AccessPoint_SSID // plain_passwd :SSID_password // plain_token :LINE_TOKEN_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 // // crypted_ssid :)$GF$Z_5$D#'*D;B*SS#8#SY+%CL // crypted_passwd:*%/O-J_F$##5)CK`(# // crypted_token :#VGN-Z_*-FCG+VK1/E;M<47E1UCJ.C/`-U(S#F?C06CV)%C_0$$E8W$89(0[5(U // // decrypt_ssid :WiFi_AccessPoint_SSID // decrypt_passwd:SSID_password // decrypt_token :LINE_TOKEN_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 //-------------------------------------------------------------- void setup() { char crypted_ssid[128],crypted_passwd[128],crypted_token[128]; char dec_ssid[128],dec_passwd[128],dec_token[128]; Serial.begin(115200); char* key = "Open Sesame"; char* plain_ssid = "WiFi_AccessPoint_SSID"; char* plain_passwd = "SSID_password"; char* plain_token = "LINE_TOKEN_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; encrypt(crypted_ssid,plain_ssid,key); encrypt(crypted_passwd,plain_passwd,key); encrypt(crypted_token,plain_token ,key); decrypt(dec_ssid,crypted_ssid,key); decrypt(dec_passwd,crypted_passwd,key); decrypt(dec_token,crypted_token,key); Serial.printf("key :%s\n\n",key); Serial.printf("plain_ssid :%s\n",plain_ssid); Serial.printf("plain_passwd :%s\n",plain_passwd); Serial.printf("plain_token :%s\n",plain_token); Serial.printf("\n"); Serial.printf("crypted_ssid :%s\n",crypted_ssid); Serial.printf("crypted_passwd:%s\n",crypted_passwd); Serial.printf("crypted_token :%s\n",crypted_token); Serial.printf("\n"); Serial.printf("decrypt_ssid :%s\n",dec_ssid); Serial.printf("decrypt_passwd:%s\n",dec_passwd); Serial.printf("decrypt_token :%s\n",dec_token); Serial.printf("\n"); sleep; } void loop() { } void encrypt( char*a, char*b, char* key) { char x[128]; int i,j,k,m; k = 0; int n = strlen(key); for (i=0; b[i]!=0; i++) { x[i] = b[i]^key[k++]; k %= n; } m = i; // 8bit -> 6bit // 8bit 0 1 2 // 000000|00, 0000|0000, 00|000000 // 6bit 0 1 2 3 j = 0; for (i=0; i>2; break; case 1: a[j] = (x[i]&0x03)<<4 | (x[i+1]&0xF0)>>4; i++; break; case 2: a[j] = (x[i]&0x0F)<<2 | (x[i+1]&0xC0)>>6; i++; break; case 3: a[j] = x[i]&0x3F; i++; break; } } // ascii文字に変換 for (i=0; i 8bit j = 0; for(i=0; j>4; j++; break; case 1: a[i] = (x[j]&0x0F)<<4 | (x[j+1]&0x3C)>>2; j++; break; case 2: a[i] = (x[j]&0x03)<<6 | x[j+1]&0x3F; j += 2; break; } } m = i; k = 0; int n = strlen(key); for (i=0; i