美文网首页
.NET与JAVA的AES互通【SecureRandom.get

.NET与JAVA的AES互通【SecureRandom.get

作者: 李休闻 | 来源:发表于2018-09-01 17:09 被阅读0次

java在AES加密时,有时会使用SecureRandom随机数作为密钥,这时的secret被当成了种子,以下这种实现

            String secret = "secret";
            byte[] seed = secret.getBytes();
            KeyGenerator keyGen = KeyGenerator.getInstance("AES");
            SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
            sr.setSeed(seed);
            keyGen.init(128, sr);
            SecretKey key = keyGen.generateKey();
            byte[] keyArray =key.getEncoded();

因为是固定长度(128bit),并且不超过160bit,C#可以使用下面的方式达到与java使用SecureRandom生成伪随机数一样的效果

这里上下两块代码中的keyArray是相等的

            string secret = "secret";
            byte[] seed = Encoding.UTF8.GetBytes(secret );
            using (var st = new SHA1CryptoServiceProvider())
            {
                //return sha1.ComputeHash(seed);
                using(var nd = new SHA1CryptoServiceProvider())
                {
                    var rd = nd.ComputeHash(st.ComputeHash(seed));
                    byte[] keyArray = rd.Take(16).ToArray();
                }
            }    

相关文章

网友评论

      本文标题:.NET与JAVA的AES互通【SecureRandom.get

      本文链接:https://www.haomeiwen.com/subject/gwsuwftx.html