?? fixedsecurerandom.java
字號:
package org.bouncycastle.util.test;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.security.SecureRandom;public class FixedSecureRandom extends SecureRandom{ private final byte[] _data; private int _index; private int _intPad; public FixedSecureRandom(byte[] value) { this(false, new byte[][] { value }); } public FixedSecureRandom( byte[][] values) { this(false, values); } /** * Pad the data on integer boundaries. This is necessary for the classpath project's BigInteger * implementation. */ public FixedSecureRandom( boolean intPad, byte[] value) { this(intPad, new byte[][] { value }); } /** * Pad the data on integer boundaries. This is necessary for the classpath project's BigInteger * implementation. */ public FixedSecureRandom( boolean intPad, byte[][] values) { ByteArrayOutputStream bOut = new ByteArrayOutputStream(); for (int i = 0; i != values.length; i++) { try { bOut.write(values[i]); } catch (IOException e) { throw new IllegalArgumentException("can't save value array."); } } _data = bOut.toByteArray(); if (intPad) { _intPad = _data.length % 4; } } public void nextBytes(byte[] bytes) { System.arraycopy(_data, _index, bytes, 0, bytes.length); _index += bytes.length; } // // classpath's implementation of SecureRandom doesn't currently go back to nextBytes // when next is called. We can't override next as it's a final method. // public int nextInt() { int val = 0; val |= nextValue() << 24; val |= nextValue() << 16; if (_intPad == 2) { _intPad--; } else { val |= nextValue() << 8; } if (_intPad == 1) { _intPad--; } else { val |= nextValue(); } return val; } // // classpath's implementation of SecureRandom doesn't currently go back to nextBytes // when next is called. We can't override next as it's a final method. // public long nextLong() { long val = 0; val |= (long)nextValue() << 56; val |= (long)nextValue() << 48; val |= (long)nextValue() << 40; val |= (long)nextValue() << 32; val |= (long)nextValue() << 24; val |= (long)nextValue() << 16; val |= (long)nextValue() << 8; val |= (long)nextValue(); return val; } private int nextValue() { return _data[_index++] & 0xff; }}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -