기본 콘텐츠로 건너뛰기

5월, 2022의 게시물 표시

JQ로 JSON Object 만들기

Bash로 여러 스크립트에서 JSON Object 만들 때, Escape 처리가 꽤나 귀찮다. 이럴 때, JQ를 이용하면, 간편하게 JSON Object를 만들 수 있다. 참조:  https://stackoverflow.com/questions/48470049/build-a-json-string-with-bash-variables PARAM1='Hello, world!' PARAM2='"Double Quotes"' JSON_STRING=$( jq -n \ --arg PARAM1 "${PARAM1}" \ --arg PARAM2 "${PARAM2}" \ '{param1: $PARAM1, param2: $PARAM2}' ) 결과 { "param1": "Hello, world!", "param2": "\"Double Quotes\"" }

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); ret