Fab*_*hau 10 random haskell cryptography
我是haskell的新手,想写一个函数来生成随机字节串.从我的角度来看Crypto.Random
(来自crypto-api v0.3.1)似乎是最好的模块,但我无法弄清楚.
我想做类似以下的事情:
let size = 2048
let bytestring = randomByteString size
Run Code Online (Sandbox Code Playgroud)
CryptoRandomGen
Ganesh显示的任何实例System.Random
非安全随机值(请参阅jamshidh的答案)SystemRandom
的内容).选项3:从您的平台获取熵
最后一种技术是最简单的,但在没有RDRAND指令的系统上有更高的开销 - 它必须打开文件,读取和关闭文件.这是使用entropy
包:
import System.Entropy
someFunc = do
randBytes <- getEntropy 2048
....
Run Code Online (Sandbox Code Playgroud)
选项1:使用CryptoRandomGen实例
如果你想要一个纯粹的生成器但是用高熵种子播种,那么你可以使用包中的任何CryptoRandomGen
实例化值DRBG
:
import Crypto.Random.DRBG
Run Code Online (Sandbox Code Playgroud)
然后就是Ganesh的例子(这里转载),其中有一个不同的签名newGenIO
:
do
g <- newGenIO :: IO CtrDRBG
case genBytes size g of
Left err -> error $ show err
Right (result, g2) -> return result
Run Code Online (Sandbox Code Playgroud)
对于好奇,我在我的博客上回顾了一些可用的安全RNG - 其中大多数不符合任何标准(这不好,它们似乎完全脱离程序员的袖口发明),例外的RDRAND
,HashDRBG
和HmacDRBG
.
您需要在IO
monad中执行此操作以初始化生成器的熵.像这个片段这样的东西可以用来做一个简单的例子,虽然在更复杂的代码中你应该保留生成器g2
并稍后重新使用它.
do
g <- newGenIO :: IO SystemRandom
case genBytes size of
Left err -> error $ show err
Right (result, g2) -> return result
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2267 次 |
最近记录: |