相关疑难解决方法(0)

将字节数组转换为任何基数

我有一个字节数组(任意长度),我想用我自己的基本编码器将这个数组编码成字符串.In .NET是标准Base64编码器,但如果我想对数组进行编码Base62,Base53或者Base13

甚至可以创建这样的通用基础编码器?

我知道我可以用简单的方法做到这一点,也就是说,对于每个字节保留固定数量的字符(如果是Base62,那将是5个字符),并做直接字节 - >字符编码,但我会浪费空间,因为5个Base62字符可以包含多于1个字节,但少于2个字节.

我应该怎么写这样的编码器?或者已经有一些课程了吗?
请注意我也需要通用解码器,否则这对我来说没用.

资源

由于该解决方案已经知道(使用BigInteger),我只想在这里提供一些与BigInteger该类相关的资源,因为它在.NET 3.5中不可用:

C#中的大整数
http://intx.codeplex.com/
https://svn.apache.org/repos/asf/incubator/heraldry/libraries/csharp/openid/trunk/Mono/Mono.Math/BigInteger.cs
http ://www.codeproject.com/KB/cs/BigInteger_Library.aspx
http://www.codeproject.com/KB/cs/biginteger.aspx

.net c# algorithm base64 encoding

12
推荐指数
2
解决办法
6097
查看次数

如何使用RNGCryptoServiceProvider根据我的首选字符创建随机密码?

我目前正在创建一个随机密码是这样的:

    public static int getRandomNumber(int maxNumber)
    {
        if (maxNumber < 1)
            throw new System.Exception("The maxNumber value should be greater than 1");
        byte[] b = new byte[4];
        new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(b);
        int seed = (b[0] & 0x7f) << 24 | b[1] << 16 | b[2] << 8 | b[3];
        System.Random r = new System.Random(seed);
        return r.Next(1, maxNumber);
    }
Run Code Online (Sandbox Code Playgroud)

一些可能的问题?这是一个静态函数,有一些奇怪的种子模式可能不安全,仍然使用System.Random().

使用上面的随机数生成器,我以这种低效的方式创建一个字符串:

  validCharacters = "abcdefghjkmnoxyz023456789#!@";
Run Code Online (Sandbox Code Playgroud)

然后使用有效数组循环并获取"createPassword(length)"类型字符串(注意使用不包含容错字符的字符集,如1 i等).

这是如何做到的,还是有更简单,更安全,更有效的方式

c# random rngcryptoserviceprovider

6
推荐指数
1
解决办法
3654
查看次数

如何将字节数组(MD5哈希)转换为字符串(36个字符)?

我有一个使用哈希函数创建的字节数组.我想将此数组转换为字符串.到目前为止这么好,它会给我十六进制字符串.

现在我想使用不同于十六进制字符的东西,我想用这36个字符编码字节数组:[az] [0-9].

我该怎么办?

编辑:我之所以这样做,是因为我希望有一个比十六进制字符串更小的字符串.

.net c# string hash md5

4
推荐指数
1
解决办法
4910
查看次数

标签 统计

c# ×3

.net ×2

algorithm ×1

base64 ×1

encoding ×1

hash ×1

md5 ×1

random ×1

rngcryptoserviceprovider ×1

string ×1