у нас есть openssl C ++ код шифрует кучу сообщений. наша цель расшифровать его, используя чистый JavaScript в браузере, как Chrome
Код C ++
частный:
EncryptUtil (): _isRight (true) {
BIO * bio = BIO_new_mem_buf ((void *) PUBLIC_CERT, sizeof (PUBLIC_CERT));
if (! bio) {
_isRight = false;
}
_publicKey = PEM_read_bio_RSA_PUBKEY(bio, NULL, NULL, NULL);
if ( ! _publicKey) {
_isRight = false;
}
_keyLen = RSA_size(_publicKey);
}
RSA* _publicKey;
bool _isRight;
size_t _keyLen;
static EncryptUtil* _EncryptUtilInst;
public :
static EncryptUtil* GetInstance() {
if ( ! _EncryptUtilInst) {
_EncryptUtilInst = new EncryptUtil();
}
return _EncryptUtilInst;
}
bool isRight() { return _isRight; }
bool encryptContent(const unsigned char* src, size_t nLen, std::vector<unsigned char>& dst)
{
unsigned char rsaRes[1024] = {0};
int res = RSA_public_encrypt(_keyLen, src, rsaRes, _publicKey, RSA_NO_PADDING);
dst.assign(rsaRes, rsaRes + res);
int size = dst.size();
return (res > 0);
}
};
EncryptUtil* EncryptUtil::_EncryptUtilInst = NULL;bool encryptRSA(const unsigned char* src, size_t len, std::string& encryptionResult)
{
EncryptUtil* encryptUtil = EncryptUtil::GetInstance();
if ( ! encryptUtil || ! encryptUtil->isRight() ) {
return false;
}
std::vector<unsigned char> encryptContent;
if ( ! encryptUtil->encryptContent(src, len, encryptContent) )
return false;
return base64Encode(&encryptContent[0], encryptContent.size(), encryptionResult);
}
Проблема после декодирования base64, вышла как бинарная
https://github.com/travist/jsencrypt
не может взять двоичный файл
Я пытался изменить двоичный файл на строку, но он не расшифровывает строку
что-то вроде этого
let buff = новый буфер (window.atob (encryptedData));
var uncrypted = decrypt.decrypt (parseInt (buff, 2) .toString (10));
любые мысли, спасибо
Задача ещё не решена.
Других решений пока нет …