diff --git a/dap-sdk/crypto/include/dap_enc_base64.h b/dap-sdk/crypto/include/dap_enc_base64.h
index 2fc27e454fc717a1cb97166e3beeb71c1e3d8596..7d69ba7bc85192a97bd6132e2d02abded9c311b0 100755
--- a/dap-sdk/crypto/include/dap_enc_base64.h
+++ b/dap-sdk/crypto/include/dap_enc_base64.h
@@ -38,6 +38,8 @@ extern "C" {
 
 size_t dap_enc_base64_decode(const char * in, size_t in_size, void * out, dap_enc_data_type_t standard);
 size_t dap_enc_base64_encode(const void * in, size_t in_size, char * out, dap_enc_data_type_t standard);
+char * dap_enc_strdup_to_base64(const char * a_string);
+char * dap_enc_strdup_from_base64(const char * a_string_base64);
 
 #ifdef __cplusplus
 }
diff --git a/dap-sdk/crypto/src/dap_enc_base64.c b/dap-sdk/crypto/src/dap_enc_base64.c
index 4501e7d3ab6705efae9c6332a03ae38d533459f9..b0f1351cead5ee1bb8329ec6fd6b50dbddbfa74d 100755
--- a/dap-sdk/crypto/src/dap_enc_base64.c
+++ b/dap-sdk/crypto/src/dap_enc_base64.c
@@ -271,6 +271,33 @@ size_t dap_enc_base64_encode(const void * a_in, size_t a_in_size, char * a_out,
     return size;
 }
 
+char * dap_enc_strdup_to_base64(const char * a_string){
+    size_t l_string_len = strlen(a_string);
+    size_t l_string_base64_len = DAP_ENC_BASE64_ENCODE_SIZE(l_string_len) + 1;
+    char * l_string_base64 = DAP_NEW_SIZE(char, l_string_base64_len);
+    size_t l_string_base64_len_res = dap_enc_base64_encode(a_string, l_string_len, l_string_base64, DAP_ENC_DATA_TYPE_B64);
+    l_string_base64[l_string_base64_len_res] = '\0';
+    return l_string_base64;
+}
+
+char * dap_enc_strdup_from_base64(const char * a_string_base64){
+    if(!a_string_base64)
+        return NULL;
+
+    size_t l_string_base64_len = strlen(a_string_base64);
+    if(!l_string_base64_len)
+        return NULL;
+
+    char * l_string = DAP_NEW_Z_SIZE(byte_t, l_string_base64_len * 2);
+    size_t l_string_len = dap_enc_base64_decode(a_string_base64, l_string_base64_len, l_string, DAP_ENC_DATA_TYPE_B64_URLSAFE);
+
+    if(!l_string_len){
+        DAP_DELETE(l_string);
+        return NULL;
+    }
+    return l_string;
+}
+
 
 // get the size of the result buffer required for Base-64
 // encoding/decoding.
diff --git a/modules/app-cli/dap_app_cli_net.c b/modules/app-cli/dap_app_cli_net.c
index 2ab51bd7625ccc0d9e6184809599c1515d271e52..517a42d105e349fc71a4ff1431c9c5b44cabe31e 100644
--- a/modules/app-cli/dap_app_cli_net.c
+++ b/modules/app-cli/dap_app_cli_net.c
@@ -169,15 +169,6 @@ bool s_dap_app_cli_cmd_contains_forbidden_symbol(const char * a_cmd_param){
     return false;
 }
 
-char * s_dap_app_cli_strdup_to_base64(const char * a_cmd_param){
-    size_t l_cmd_param_len = strlen(a_cmd_param);
-    size_t l_cmd_param_base64_len = DAP_ENC_BASE64_ENCODE_SIZE(l_cmd_param_len) + 1;
-    char * l_cmd_param_base64 = DAP_NEW_SIZE(char, l_cmd_param_base64_len);
-    size_t l_cmd_param_base64_len_res = dap_enc_base64_encode(a_cmd_param, l_cmd_param_len, l_cmd_param_base64, DAP_ENC_DATA_TYPE_B64);
-    l_cmd_param_base64[l_cmd_param_base64_len_res] = '\0';
-    return l_cmd_param_base64;
-}
-
 /**
  * Send request to kelvin-node
  *
@@ -198,7 +189,7 @@ int dap_app_cli_post_command( dap_app_cli_connect_param_t *a_socket, dap_app_cli
             if (a_cmd->cmd_param[i]) {
                 dap_string_append(l_cmd_data, "\r\n");
                 if(s_dap_app_cli_cmd_contains_forbidden_symbol(a_cmd->cmd_param[i])){
-                    char * l_cmd_param_base64 = s_dap_app_cli_strdup_to_base64(a_cmd->cmd_param[i]);
+                    char * l_cmd_param_base64 = dap_enc_strdup_to_base64(a_cmd->cmd_param[i]);
                     dap_string_append(l_cmd_data, l_cmd_param_base64);
                     DAP_DELETE(l_cmd_param_base64);
                 }else{