问题标签 [secure-random]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - SecureRandom 的 Android 实现是否产生真正的随机数?
我读过,一般来说,SecureRandom 的某些实现可能会产生真正的随机数。
特别是,Android 文档说
此类的实例将使用内部熵源生成初始种子,例如
/dev/urandom
但这是否意味着它将产生真正的随机数(即,而不是伪随机数)?
如果我SecureRandom
以这种方式在Android中使用......
...每当我打电话时,我会得到一个真正随机的输出sr.nextBoolean()
吗?
或者,如果我每次都通过这样做来获得输出,那么输出是否可能更多(或更少?)随机:
new SecureRandom().nextBoolean()
?
java - 使用 SecRandomCopyBytes 生成范围内的随机数
我正在使用SecRandomCopyBytes
生成一个安全的随机数。
有没有办法指定“范围”?
我需要获得这段Java
代码的相同行为:
任何提示将不胜感激!
更新
看到我提出了一个愚蠢的问题,我觉得有必要分享解决方案,扩展 Int 类型:
java - 是否保证 2 次连续调用安全随机数会给出不同的数字?
使用SecureRandom
是否可以保证2 个连续调用不会返回相同的数字?
如果这是客户端 API 端的严格要求,那么代码中的以下循环是否多余?
java - 生成大量随机数的有效方法
我有一个 java 方法,它必须在很短的时间内生成大量随机数。我的第一种方法是使用 Math.random (它的工作速度非常快),但我有一个假设,因为我Math.random
在另一个后面这么快调用,“随机”并不是真正随机的(或不太随机),因此(但我需要它尽可能随机)。
我现在有两个问题:
- 我的假设是否正确,因为在很短的时间内调用的数量会减少随机输出的随机性?如果 1. 的答案是肯定的:
- 消除随机性较小的问题的最快方法(每次调用)是什么?
我已经玩过SecureRandom
,但它至少比普通的 Math.random 慢 15 倍,这对于我的要求来说太慢了。
java - 静态令牌生成?
我发现了这个问题How to generate a random alpha-numeric string? 答案包含以下代码:
我的问题是我能做到nextSessionId
static
吗?
我知道从技术上讲我可以,但我很好奇它是否是故意非静态的。我知道作者可能不会阅读我的问题,也不会向我解释他对这个问题的反应是什么,但也许有一些我不知道的事情,有人可以向我解释背后的原因这个答案。我认为使此方法成为非静态方法没有意义,因为我从创建SessionIdentifierGenerator
对象中一无所获。我更喜欢在不创建SessionIdentifierGenerator
对象的情况下调用 nextSessionId。
java - 如何在 Java 中创建一定位大小的随机输出?
我想创建一个随机的字母数字字符串,其位数始终为 k。大小 k 会比较大(从 128 变化到 2048 或更大)。我正在阅读这个优秀的线程,我正在尝试使用and类来解决问题,但无济于事。Random
SecureRandom
更准确地说,结果不一定是字符串,它可以是任何东西,只要它是随机的并且它的位数始终为 k。
java - 为什么使用相同的字符串、密钥和 SecureRandom 的 Java Cipher 加密总是不同?
谢谢大家的意见。
但是,我必须解释这个问题。
我知道我们不应该使用修复随机生成器来比较加密的结果,因为它可能会降低安全性。但是,我只是想在测试中进行,我将在实际运行中使用随机的原始机制。
情况是我需要通过以下步骤使用帐户/密码登录服务器:
- 从服务器获取信息:abcom/get_cipher.cgi。
- 接收响应,解析它并获取一些信息来创建密码。
- 使用密码加密帐户/密码,然后编写以下 URL abcom/login.cgi?encrypted={encrypted_account_password}
这是一个复杂的过程,我无法请求服务器更改协议。我想测试整个登录过程。因此,我尝试提供假帐户/密码,并在不解密结果的情况下检查生成的 url 是否正确(如果解密结果,则意味着在这个测试用例中,我需要解密加密的结果,解析 url,并提取相关信息,与测试无关的信息太多了。另外,如果我在登录过程中做一些改变,我可能需要修改测试用例中的解密和解析过程。)
这意味着哈希函数不适合我。(原来的登录过程没有使用任何哈希,所以我不想在测试用例中对其进行测试。而且,即使我检查了哈希结果是正确的,也不能证明登录过程是正确的。)
===原来的问题如下===
我有一个需要登录的程序。为了避免在网络上以纯文本形式传输密码,我需要对其进行加密。换句话说,登录过程包含一个加密阶段。
然后,我想为整个登录过程编写一个测试用例。如果使用相同的帐户和密码,我认为加密结果是相同的。
由于它可能在加密过程中使用 SecureRandom,我用 Mockito 编写了一个假的 SecureRandom,代码如下:
generateRandomWithFixSeed()将使用相同的密钥新建一个随机数,以便生成相同的结果。generateSecureRandomWithFixSeed()使用Makito 检测函数调用 nextBytes() 并始终回答随机结果。测试test_SecureRandom_WithFixSeed()还显示两个不同的 SecureRandom 实例生成相同的结果。
但是,如果我在密码中使用 generateSecureRandomWithFixSeed() 如下,它不能总是返回相同的结果。
啊
ruby-on-rails - 如何使用 SecureRandom.urlsafe_base64?
我对此真的很陌生,需要创建一个 2 到 20 个字符之间的 url 安全令牌,并且只允许使用字母数字字符(字母和数字)。我使用此令牌由支付提供商进行处理。
我有下面的方法,但我得到一个错误,令牌无效。如何重写该方法,使其仍然是 url 安全的,但不超过 20 个字符并且只使用字母数字字符?
java - 生成特定范围内的随机数
我正在尝试n
在我的 Android 代码中生成 0-31 之间的随机数。下面是我正在使用的代码:
indices_length
是我需要的随机数的数量。通常是 6,7 或 9。但是当我打印生成的数组时,我通常最终会看到重复。有人可以指出我犯的错误。我添加了以下代码行以过滤掉随机重复项:
提前致谢!