-...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.
Here is my code. Mình thử vài cách khác, lib rc4 cho c khác nữa, nhưng cũng đều chưa dc.
https://paste.ofcode.org/VveXG2FRHaDkZDt4kZ38gE
Để mọi người tiện theo dõi, mình copy paste code của bạn và của thư viện bạn dùng (thật ra, nó là wrapper quanh thư viện openssl).
C++ Code:
LOGD("=== START OPENCRYPT"); std::string textOri = "hihi"; std::string keyOri = "bienpx"; std::string textEn = ""; textEn = getEncryptKey(env, textOri); // textEn will equal something like U2FsdGVkX19wUtlYlFLspwcUOlc= LOGD("=== textEn getFromServer : %s", textEn.c_str()); std::string textDe; textDe = decode_rc4(textEn); LOGD("=== textDecrypt: %s", textDe.c_str()); // function encode , decode and lib rc4 here : https://gist.github.com/yfnick/ef5d7f1b12bee997a4d7
C++ Code:
// rc4.h #ifndef __RC4_H__ #define __RC4_H__ #include <string> std::string decode_rc4(const std::string&); std::string encode_rc4(const std::string&); #endif
C++ Code:
//rc4.cc #include <openssl/rc4.h> #include <string.h> #include <stdlib.h> #include <iostream> #include "rc4.h" using namespace std; #define KEY "define your key here" #define KEY_LEN (sizeof(KEY)-1) string decode_rc4(const string &data) { RC4_KEY key; int len = data.size(); unsigned char *obuf = (unsigned char*)malloc(len+1); memset(obuf, 0, len+1); RC4_set_key(&key, KEY_LEN, (const unsigned char*)KEY); RC4(&key, len, (const unsigned char*)data.c_str(), obuf); string decode_data((char*)obuf, len); free(obuf); return decode_data; } string encode_rc4(const string &data) { RC4_KEY key; int len = data.size(); unsigned char *obuf = (unsigned char*)malloc(len+1); memset(obuf, 0, len+1); RC4_set_key(&key, KEY_LEN, (const unsigned char*)KEY); RC4(&key, len, (const unsigned char*)data.c_str(), obuf); string encode_data((char*)obuf, len); free(obuf); return encode_data; }
Xem sơ qua và phán đoán thì mình thấy 2 nguyên nhân có vẻ khả dĩ nhất:
a) Key của bạn, hoặc Data của bạn, hoặc cả hai, chưa được định dạng đúng. Giá trị "U2FsdGVkX19wUtlYlFLspwcUOlc=" là một chuỗi nhị phân đã được mã hóa ở 1 định dạng văn bản nào đó, có lẽ là base-64. Cần phải giải mã nó trở về dạng nhị phân trước khi truyền nó cho openssl.
b) Key của bạn chưa được truyền vào openssl. Wrapper của bạn lấy key từ vùng nhớ KEY, xem 'rc4.cc'.
-...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.
Trò chơi đi tìm mật thư trong những lần cắm trại rất ấn tượng.
Tìm nơi giấu, giải mã nó để lại ấn tượng lớn cho nhiều người, dù chỉ không quá 1 đội chiến thắng.
Làm sao hiệp đồng tác chiến giữa người tìm, người giải mã; làm sao phối hợp js với c++. Chúng ta chờ xem !