工做中常常會遇到不一樣開發語言之間的接口加解密,咱們的接口提供方用Java語言開發,用到了SHA1PRNG
PRNG 是一種僞隨機數生成器,它通常都是使用特定的隨機種子,根據某個特定的算法生成僞隨機序列,一般用於給其餘加解密算法提供種子。
Java SecureRandom 兩種僞隨機數算法( SHA1PRNG 與 NativePRNG )
SHA1PRNG 實現原理是經過不斷對當前Hash值進行再一次SHA1哈希而成,當給定種子的狀況下,每次輸出都是基於上次的結果。
Java 代碼
SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); random.setSeed(encryptKey.getBytes()); kgen.init(128, random);
Ruby 代碼以下java
def sha1_prng(key) key = OpenSSL::Digest.digest("SHA1", key) key_bytes = OpenSSL::Digest.digest("SHA1", key).bytes[0..15] for i in 0...key_bytes.size if key_bytes[i] > 128 key_bytes[i] = key_bytes[i] - 256 end end key_bytes.pack('c*').force_encoding("UTF-8") end