diff --git a/src/util/string-helper.cpp b/src/util/string-helper.cpp
index ed3c961..44083b3 100644
--- a/src/util/string-helper.cpp
+++ b/src/util/string-helper.cpp
@@ -23,6 +23,7 @@
 #include "../encoding/buffer-stream.hpp"
 #include "../security/transform/buffer-source.hpp"
 #include "../security/transform/hex-decode.hpp"
+#include "../security/transform/hex-encode.hpp"
 #include "../security/transform/stream-sink.hpp"
 
 #include <boost/algorithm/string/trim.hpp>
@@ -33,13 +34,13 @@
 namespace ndn {
 
 void
-printHex(std::ostream& os, const uint8_t* buffer, size_t length, bool isUpperCase/* = true*/)
+printHex(std::ostream& os, const uint8_t* buffer, size_t length, bool wantUpperCase)
 {
   if (buffer == nullptr || length == 0)
     return;
 
   auto newFlags = std::ios::hex;
-  if (isUpperCase) {
+  if (wantUpperCase) {
     newFlags |= std::ios::uppercase;
   }
   auto oldFlags = os.flags(newFlags);
@@ -52,26 +53,31 @@
 }
 
 void
-printHex(std::ostream& os, const Buffer& buffer, bool isUpperCase/* = true*/)
+printHex(std::ostream& os, const Buffer& buffer, bool wantUpperCase)
 {
-  return printHex(os, buffer.buf(), buffer.size(), isUpperCase);
+  return printHex(os, buffer.buf(), buffer.size(), wantUpperCase);
 }
 
 std::string
-toHex(const uint8_t* buffer, size_t length, bool isUpperCase/* = true*/)
+toHex(const uint8_t* buffer, size_t length, bool wantUpperCase)
 {
-  if (buffer == nullptr || length == 0)
-    return "";
+  BOOST_ASSERT(buffer != nullptr || length == 0);
+
+  namespace tr = security::transform;
 
   std::ostringstream result;
-  printHex(result, buffer, length, isUpperCase);
+  tr::bufferSource(buffer, length) >> tr::hexEncode(wantUpperCase) >> tr::streamSink(result);
   return result.str();
 }
 
 std::string
-toHex(const Buffer& buffer, bool isUpperCase/* = true*/)
+toHex(const Buffer& buffer, bool wantUpperCase)
 {
-  return toHex(buffer.buf(), buffer.size(), isUpperCase);
+  namespace tr = security::transform;
+
+  std::ostringstream result;
+  tr::bufferSource(buffer) >> tr::hexEncode(wantUpperCase) >> tr::streamSink(result);
+  return result.str();
 }
 
 int
diff --git a/src/util/string-helper.hpp b/src/util/string-helper.hpp
index 3b2011f..7785f69 100644
--- a/src/util/string-helper.hpp
+++ b/src/util/string-helper.hpp
@@ -43,7 +43,7 @@
  * @param os Output stream
  * @param buffer The array of bytes
  * @param length Size of the array
- * @param isUpperCase if true (default) output use uppercase for hex values
+ * @param wantUpperCase if true (default) output use uppercase for hex values
  *
  * Examples:
  *
@@ -55,24 +55,24 @@
  * The output string is a continuous sequence of hex characters without any whitespace separators.
  */
 void
-printHex(std::ostream& os, const uint8_t* buffer, size_t length, bool isUpperCase = true);
+printHex(std::ostream& os, const uint8_t* buffer, size_t length, bool wantUpperCase = true);
 
 /**
  * @brief Output the hex representation of the bytes in the @p buffer to the output stream @p os
  *
  * @param os Output stream
  * @param buffer The array of bytes
- * @param isUpperCase if true (default) output use uppercase for hex values
+ * @param wantUpperCase if true (default) output use uppercase for hex values
  */
 void
-printHex(std::ostream& os, const Buffer& buffer, bool isUpperCase = true);
+printHex(std::ostream& os, const Buffer& buffer, bool wantUpperCase = true);
 
 /**
  * @brief Return the hex representation of the bytes in array
  *
  * @param buffer The array of bytes
  * @param length Size of the array
- * @param isUpperCase if true (default) output use uppercase for hex values
+ * @param wantUpperCase if true (default) output use uppercase for hex values
  *
  * Examples:
  *
@@ -84,16 +84,16 @@
  * The output string is a continuous sequence of hex characters without any whitespace separators.
  */
 std::string
-toHex(const uint8_t* buffer, size_t length, bool isUpperCase = true);
+toHex(const uint8_t* buffer, size_t length, bool wantUpperCase = true);
 
 /**
  * @brief Return the hex representation of the bytes in the @p buffer to the output stream @p os
  *
  * @param buffer The array of bytes
- * @param isUpperCase if true (default) output use uppercase for hex values
+ * @param wantUpperCase if true (default) output use uppercase for hex values
  */
 std::string
-toHex(const Buffer& buffer, bool isUpperCase = true);
+toHex(const Buffer& buffer, bool wantUpperCase = true);
 
 /**
  * @brief Convert the hex character to an integer from 0 to 15, or -1 if not a hex character
diff --git a/tests/unit-tests/util/string-helper.t.cpp b/tests/unit-tests/util/string-helper.t.cpp
index 65b3e50..c59804b 100644
--- a/tests/unit-tests/util/string-helper.t.cpp
+++ b/tests/unit-tests/util/string-helper.t.cpp
@@ -35,14 +35,13 @@
   std::string test = "Hello, world!";
   BOOST_CHECK_EQUAL(toHex(reinterpret_cast<const uint8_t*>(test.data()), test.size()),
                     "48656C6C6F2C20776F726C6421");
-
   BOOST_CHECK_EQUAL(toHex(reinterpret_cast<const uint8_t*>(test.data()), test.size(), false),
                     "48656c6c6f2c20776f726c6421");
-
   BOOST_CHECK_EQUAL(toHex(nullptr, 0), "");
 
   Buffer buffer(test.data(), test.size());
   BOOST_CHECK_EQUAL(toHex(buffer, false),  "48656c6c6f2c20776f726c6421");
+  BOOST_CHECK_EQUAL(toHex(Buffer{}), "");
 }
 
 BOOST_AUTO_TEST_CASE(FromHexChar)
