Java の次の行を C# に変換するにはどうすればよいでしょうか。サイズが 130 ビットのランダムな BigInteger を生成し、それを base 32 (つまり、 decimal ではない) の文字列に変換してから、文字列を操作します。
new BigInteger(130, new SecureRandom()).toString(32).replace("/", "w").toUpperCase(Locale.US);
どうすればC#でそれを達成できますか?
- ランダムな 130 ビット BigInteger を生成する
- base 32 の文字列に変換します
ランダムな BigInteger に関しては、次の関数があります。
static BigInteger RandomInteger(int bits)
{
RNGCryptoServiceProvider secureRandom = new RNGCryptoServiceProvider();
// make sure there is extra room for a 0-byte so our number isn't negative
// in the case that the msb is set
var bytes = new byte[bits / 8 + 1];
secureRandom.GetBytes(bytes);
// mask off excess bits
bytes[bytes.Length - 1] &= (byte)((1 << (bits % 8)) - 1);
return new BigInteger(bytes);
}
base 32 変換に対応していないこの質問から取得: C# での Java の BigInteger と同等
ただし、その関数も正しいかどうかはわかりません。
私がこれまでに持っているC#コード、RandomIntegerは上記の関数です:
RandomInteger(130).ToString().Replace("/","w").ToUpper(CultureInfo.GetCultureInfo("en-US"));