기본 콘텐츠로 건너뛰기

EVP Base64 with C++

인코딩

string encodeBase64(const unsigned char *buf, size_t blen)
{
    auto plen = 4 * ((blen + 2) / 3);
    auto obuf = make_unique<unsigned char[]>(plen + 1);
    EVP_ENCODE_CTX *ctx = EVP_ENCODE_CTX_new();
    EVP_EncodeInit(ctx);
    int olen = plen;
    EVP_EncodeUpdate(ctx, obuf.get(), &olen, buf, blen);
    int flen = 0;
    EVP_EncodeFinal(ctx, obuf.get() + olen, &flen);
    olen += flen;
    EVP_ENCODE_CTX_free(ctx);
    return string((char *)obuf.get(), olen);
}

디코딩

pair<unique_ptr<unsigned char[]>, size_t> decodeBase64(const string &buf)
{
    auto plen = 3 * buf.size() / 4;
    auto obuf = make_unique<unsigned char[]>(plen + 1);
    EVP_ENCODE_CTX *ctx = EVP_ENCODE_CTX_new();
    EVP_DecodeInit(ctx);
    int olen = plen;
    EVP_DecodeUpdate(ctx, obuf.get(), &olen, (unsigned char *)buf.c_str(), buf.size());
    int flen = 0;
    EVP_DecodeFinal(ctx, obuf.get() + olen, &flen);
    olen += flen;
    EVP_ENCODE_CTX_free(ctx);
    return make_pair<unique_ptr<unsigned char[]>, size_t>(move(obuf), olen);
}

댓글

이 블로그의 인기 게시물

탐색기에서 OneDrive 이 2개로 보이는 문제

왜 2개가 보이는지 모르겠지만, Registry 삭제하면 됨 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace 하위 키에서 OneDrive 둘 중에 하나만 지워도 바로 반영됨. 참조:  https://answers.microsoft.com/en-us/msoffice/forum/all/duplicate-onedrives-in-file-explorer/49c935a6-287b-43a5-aed5-2dee2a1c1b22