diff --git a/nacl/hash.py b/nacl/hash.py
index 1f1e3ab3d9c89d186c13bc4370f047e8dfd1cb24..cee6e7ceb8e9e31f635e4747a79b9a18818983f5 100644
--- a/nacl/hash.py
+++ b/nacl/hash.py
@@ -8,7 +8,7 @@ def sha256(message, binary=False):
     digest = nacl.ffi.new("unsigned char[]", nacl.lib.crypto_hash_sha256_BYTES)
     if not nacl.lib.crypto_hash_sha256(digest, message, len(message)):
         raise CryptoError("Hashing failed")
-    digest = nacl.ffi.string(digest)
+    digest = nacl.ffi.buffer(digest, nacl.lib.crypto_hash_sha256_BYTES)[:]
 
     if binary:
         return digest
@@ -19,7 +19,7 @@ def sha512(message, binary=False):
     digest = nacl.ffi.new("unsigned char[]", nacl.lib.crypto_hash_sha512_BYTES)
     if not nacl.lib.crypto_hash_sha512(digest, message, len(message)):
         raise CryptoError("Hashing failed")
-    digest = nacl.ffi.string(digest)
+    digest = nacl.ffi.buffer(digest, nacl.lib.crypto_hash_sha512_BYTES)[:]
 
     if binary:
         return digest
diff --git a/nacl/random.py b/nacl/random.py
index 18038a6311ee8926c665bcb861ba51a4953131f7..ded56faee4fc43e36181cd1bcebafc5b52f367e3 100644
--- a/nacl/random.py
+++ b/nacl/random.py
@@ -4,4 +4,4 @@ from . import nacl
 def random(size=32):
     data = nacl.ffi.new("unsigned char[]", size)
     nacl.lib.randombytes(data, size)
-    return nacl.ffi.string(data)
+    return nacl.ffi.buffer(data, size)[:]