Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Decrypt Rc4 dữ liệu trả về kí tự, ko đúng text ban đầu. Dữ liệu ban đầu được Encrypt trên server nodejs và đưa xuống C++ để dec

  1. #1
    Ngày gia nhập
    01 2019
    Bài viết
    2

    Mặc định Decrypt Rc4 dữ liệu trả về kí tự, ko đúng text ban đầu. Dữ liệu ban đầu được Encrypt trên server nodejs và đưa xuống C++ để dec

    Mình mã hóa dữ liệu text bằng key, dùng CryptoJS.RC4 trên nodejs, sau đó trả về dưới C++ đoạn encrypt đó để decrypt, sau khi giải mã trả về kí tự, ko trả về đúng text ban đầu ở trên server @@ Bạn nào có kinh nghiệm giúp mình với

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		a.jpg
Lần xem:	6
Size:		18.1 KB
ID:		66779

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    577

    Trích dẫn Nguyên bản được gửi bởi bienpx224 Xem bài viết
    Mình mã hóa dữ liệu text bằng key, dùng CryptoJS.RC4 trên nodejs, sau đó trả về dưới C++ đoạn encrypt đó để decrypt, sau khi giải mã trả về kí tự, ko trả về đúng text ban đầu ở trên server @@ Bạn nào có kinh nghiệm giúp mình với

    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		a.jpg
Lần xem:	6
Size:		18.1 KB
ID:		66779
    Chắc là hiểu nhầm định dạng thôi.

    Code C++ của bạn đâu?
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  3. #3
    Ngày gia nhập
    01 2019
    Bài viết
    2

    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

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    577

    Để 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:
    1. LOGD("=== START OPENCRYPT");
    2.     std::string textOri = "hihi";
    3.     std::string keyOri = "bienpx";
    4.     std::string textEn = "";
    5.     textEn = getEncryptKey(env, textOri);
    6.     // textEn will equal something like   U2FsdGVkX19wUtlYlFLspwcUOlc=
    7.     LOGD("=== textEn getFromServer : %s", textEn.c_str());
    8.    
    9.     std::string textDe;
    10.     textDe = decode_rc4(textEn);
    11.     LOGD("=== textDecrypt: %s", textDe.c_str());
    12.    
    13.     // function encode , decode and lib rc4 here : https://gist.github.com/yfnick/ef5d7f1b12bee997a4d7

    C++ Code:
    1. // rc4.h
    2.  
    3. #ifndef __RC4_H__
    4. #define __RC4_H__
    5.  
    6. #include <string>
    7.  
    8. std::string decode_rc4(const std::string&);
    9. std::string encode_rc4(const std::string&);
    10.  
    11. #endif

    C++ Code:
    1. //rc4.cc
    2.  
    3. #include <openssl/rc4.h>
    4. #include <string.h>
    5. #include <stdlib.h>
    6. #include <iostream>
    7. #include "rc4.h"
    8.  
    9. using namespace std;
    10.  
    11. #define KEY "define your key here"
    12. #define KEY_LEN (sizeof(KEY)-1)
    13.  
    14. string decode_rc4(const string &data) {
    15.     RC4_KEY key;
    16.  
    17.     int len = data.size();
    18.     unsigned char *obuf = (unsigned char*)malloc(len+1);
    19.     memset(obuf, 0, len+1);
    20.  
    21.     RC4_set_key(&key, KEY_LEN, (const unsigned char*)KEY);
    22.     RC4(&key, len, (const unsigned char*)data.c_str(), obuf);
    23.  
    24.     string decode_data((char*)obuf, len);
    25.     free(obuf);
    26.  
    27.     return decode_data;
    28. }
    29.  
    30. string encode_rc4(const string &data) {
    31.     RC4_KEY key;
    32.  
    33.     int len = data.size();
    34.     unsigned char *obuf = (unsigned char*)malloc(len+1);
    35.     memset(obuf, 0, len+1);
    36.  
    37.     RC4_set_key(&key, KEY_LEN, (const unsigned char*)KEY);
    38.     RC4(&key, len, (const unsigned char*)data.c_str(), obuf);
    39.  
    40.     string encode_data((char*)obuf, len);
    41.     free(obuf);
    42.  
    43.     return encode_data;
    44. }

    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'.
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  5. #5
    Ngày gia nhập
    08 2017
    Bài viết
    3,055

    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 !

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn