在PHP中,C#的RNGCryptoServiceProvider等同于什么?

时间:2012-11-03 10:01:21

标签: php cryptography rngcryptoserviceprovider

我正在研究asp.net和php的基本安全性,我已经能够在asp.net上实现该应用程序了,我想做的就是用php提出同样的东西

这是我用于我的asp.net应用程序的代码,如果可能的话我想转换为php:

public static byte[] GenerateSalt()
    {
        const int MinSaltSize = 4;
        const int MaxSaltSize = 8;

        // Generate a random number to determine the salt size.
        Random random = new Random();
        int saltSize = random.Next(MinSaltSize, MaxSaltSize);

        // Allocate a byte array, to hold the salt.
        byte[] saltBytes = new byte[saltSize];

        // Initialize the cryptographically secure random number generator.
        RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();

        // Fill the salt with cryptographically strong byte values.
        rng.GetNonZeroBytes(saltBytes);

        return saltBytes;
    }

我还想知道在php中用于rng.GetNonZeroBytes()的函数

然后我会使用base64_encode / base64_decode作为数据。先生/女士,你的答案会有很大的帮助。谢谢++:D

1 个答案:

答案 0 :(得分:1)

尽管名字很奇怪,

mcrypt_create_iv(size, MCRYPT_DEV_URANDOM)应该没问题。它几乎相当于rng.GetBytes

使用DEV_URANDOM至关重要,DEV_RANDOM 非常慢,因为安全性可以忽略不计,RAND不安全。

不确定为什么你想要非零字节。在Base64编码之后,零字节将是正常的可打印字符。

我建议使用base64_encode(mcrypt_create_iv(9, MCRYPT_DEV_URANDOM))

之类的内容