Rub*_*max 5 java android bouncycastle
我正在尝试使用Java生成加密安全随机数,并使用以下代码部分创建SecureRandom对象以查看其提供者和算法:
Provider prov=new org.spongycastle.jce.provider.BouncyCastleProvider();
Security.insertProviderAt(prov, 1);
SecureRandom sr=new SecureRandom();
srProvider=sr.getProvider().toString();
srAlgorithm=sr.getAlgorithm();
Run Code Online (Sandbox Code Playgroud)
(海绵城堡是由罗伯托·泰莱制作的机器人的弹性城堡 - https://github.com/rtyley)
当我显示提供程序和算法时,它显示:加密版本1.0 SHA1PRNG
令我惊讶的是,即使将提供程序安装为代码中的第一个提供程序,提供程序也不是Spongycastle.我想问你a)在Spongy Castle(或Bouncy Castle)中没有实施SecureRandom.b)究竟什么是"加密版本1.0"(我的意思是它是Sun JCE提供商还是什么?)
谢谢...
鲁维
Bouncy Castle确实提供了一组伪随机数生成器 (PRNG)。PRNG 有很多名称;NIST 将它们称为确定性随机位生成器 (DRBG)。然而,它们仅在 Bouncy Castle 的“轻量级”API 包中可用org.bouncycastle.crypto.prng。
然而,Bouncy Castle 是加密算法的纯软件实现。这意味着它不包含熵的来源。熵不能仅由软件生成,因为软件算法本身是确定性的。因此,即使 Bouncy Castle 提供程序在其"BC"提供程序(或 Android 的 Spongy 提供程序)中注册一些生成器,它仍然必须依赖与平台SecureRandom实现相同的熵源。
由于熵源可能是大多数性能问题的罪魁祸首,因此您不应期望 Bouncy Castle 在随机数生成效率方面有奇迹。
目前(v1.54)Bouncy Castle 提供商SecureRandom根本没有注册任何实现,所以就是这样。
假设您在 Android 上运行(您没有明确说明这一点)。Bouncy Castle 不提供SecureRandom实现。“Crypto”是 Apache Harmony(大多数 Android 核心 Java 代码都基于此)JCE 提供程序。Android 中没有 Sun JCE 代码。顺便说一句,“加密”提供商仅提供 SHA1PRNG (RNG)、SHA-1(哈希)和 SHA1withDSA(签名)实现。其他一切均由 Bouncy Castle 或基于 OpenSSL 的提供商提供。
问题:为什么您认为需要SecureRandomBouncy/Spongy Castle 的实现?
| 归档时间: |
|
| 查看次数: |
8912 次 |
| 最近记录: |