Когда я запускаю этот код, я получаю ошибку декодирования от Data.Text
. Что я делаю не так?Преобразование ByteString, созданное System.Entropy to Text
import Data.Text (Text, pack, unpack)
import Data.Text.Encoding (decodeUtf8)
import Data.ByteString (ByteString)
import System.Entropy
randBS :: IO ByteString
randBS = do
randBytes <- getEntropy 2048
return randBytes
main :: IO()
main = do
r <- randBS
putStrLn $ unpack $ decodeUtf8 r
Ошибка:
Cannot decode byte '\xc4': Data.Text.Internal.Encoding.Fusion.streamUtf8:
Invalid UTF-8 stream
Я хотел бы генерировать случайные байты, которые будут использоваться в качестве маркера AUTH.
Я на Mac OS X (Yosemite) и GHC Версия 7.10.1
Я предложил бы использовать что-то вроде [base16-байтовой строки] (https://hackage.haskell.org/package/base16- байтовой строки). Выход будет длиннее, но всегда будет иметь одинаковую длину (в два раза больше, чем входной ByteString), а выход будет шестнадцатеричным вместо тарабарщины (что больше подходит для токена аутентификации). – cchalmers
@cchalmers Вы правы. Это действительно зависит от выхода, которого хочет OP, чего он действительно не объяснил. – Bakuriu
@Bakuriu спасибо! Я хотел бы создать токен сеанса, который является безопасным. Этот токен будет храниться в БД и совместно с клиентом. Кодирование, вероятно, даст мне то, что я хочу. – Ecognium