- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试根据 FIPS 186-3 中的描述实现 Miller-Rabin 素性测试C.3.1.无论我做什么,我都无法让它发挥作用。说明非常具体,我认为我没有遗漏任何内容,但对于非素数,我得到了 true
。
我做错了什么?
template <typename R, typename S, typename T>
T POW(R base, S exponent, const T mod){
T result = 1;
while (exponent){
if (exponent & 1)
result = (result * base) % mod;
exponent >>= 1;
base = (base * base) % mod;
}
return result;
}
// used uint64_t to prevent overflow, but only testing with small numbers for now
bool MillerRabin_FIPS186(uint64_t w, unsigned int iterations = 50){
srand(time(0));
unsigned int a = 0;
uint64_t W = w - 1; // dont want to keep calculating w - 1
uint64_t m = W;
while (!(m & 1)){
m >>= 1;
a++;
}
// skipped getting wlen
// when i had this function using my custom arbitrary precision integer class,
// and could get len(w), getting it and using it in an actual RBG
// made no difference
for(unsigned int i = 0; i < iterations; i++){
uint64_t b = (rand() % (W - 3)) + 2; // 2 <= b <= w - 2
uint64_t z = POW(b, m, w);
if ((z == 1) || (z == W))
continue;
else
for(unsigned int j = 1; j < a; j++){
z = POW(z, 2, w);
if (z == W)
continue;
if (z == 1)
return 0;// Composite
}
}
return 1;// Probably Prime
}
这个:
std::cout << MillerRabin_FIPS186(33) << std::endl;
std::cout << MillerRabin_FIPS186(35) << std::endl;
std::cout << MillerRabin_FIPS186(37) << std::endl;
std::cout << MillerRabin_FIPS186(39) << std::endl;
std::cout << MillerRabin_FIPS186(45) << std::endl;
std::cout << MillerRabin_FIPS186(49) << std::endl;
给我:
0
1
1
1
0
1
最佳答案
您的实现与维基百科的唯一区别是您忘记了第二个 return 复合语句。您应该在循环结束时返回 0。
编辑:正如丹尼尔所指出的,还有第二个区别。 continue 继续内部循环,而不是像它应该的那样继续外部循环。
for(unsigned int i = 0; i < iterations; i++){
uint64_t b = (rand() % (W - 3)) + 2; // 2 <= b <= w - 2
uint64_t z = POW(b, m, w);
if ((z == 1) || (z == W))
continue;
else{
int continueOuter = 0;
for(unsigned int j = 1; j < a; j++){
z = POW(z, 2, w);
if (z == W)
continueOuter = 1;
break;
if (z == 1)
return 0;// Composite
}
if (continueOuter) {continue;}
}
return 0; //This is the line you're missing.
}
return 1;// Probably Prime
另外,如果输入是偶数,它可能总是返回素数,因为 a 为 0。您应该在开始时为此添加一个额外的检查。
关于c++ - Miller-Rabin 素数测试 FIPS 186-3 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11236757/
我有一个符合 FIPS 的解决方案,其中几乎没有不符合 FIPS 的库。这些不符合 FIPS 的库是未使用的死代码。这对于符合 FIPS 的审计来说是否可以接受? 我们是否需要从我们的解决方案中删除不
我们创建了一个 Web 应用程序,该应用程序可以缓存状态下拉列表,并且每周仅重新缓存一次。我在注册表中禁用了 FIPS,但找不到有关如何处理此问题的任何信息。 每次运行该应用程序时,尽管 FIPS 被
我已经在 Amazon Cognito 中为我的 Web 应用程序设置了一个用户池。该应用程序不是公开的,只允许特定用户登录。亚马逊控制台中该用户池的策略只允许管理员创建新用户。 我已经通过 Face
我正在尝试在 IOS 模拟器 上创建 OpenSSL/FIPS 构建分支。我尝试过的每一种组合都会出现编译/链接错误,或者在构建时出现 FIPS 签名不匹配(我已经尝试了很多很多脚本排列和设置组合)。
I have one large SAS dataset and I am currently trying to create one FIPS code variable and at th
我的公司在 .Net Framework 3.5 中使用 ASP.NET 创建了项目,并使用 Windows Web 服务器 2008 r2 来托管该项目。 在 Web 服务器中,我们启用了“系统加密
我正在分别使用 openssl-fips-ecp-2.0.9 和 openssl-1.0.1j 构建 FIPS 对象模块和 FIPS 兼容的 OpenSSL。 其中一个 FIPS 编译成功。但根据 U
我在 Java 8 v102 中,使用 sqljdbc42.jar 和 jtds-1.3.1.jar 以 FIPS 模式连接到 SQL Server 2008。我用 https://www.bounc
我正在寻找一种经过 FIPS 验证的哈希算法来将密码存储在数据库中。我确实使用了以下代码,但仍然出现错误 This implementation is not part of the Windows
在尝试在已经启动并运行的 CentOS 实例上启用 FIPS 时,我查看了 RHEL 文档和gcloud 的文档有限,但无济于事。 https://access.redhat.com/document
我在带有 Intel Core 2 Duo E8400 3 GHz 处理器的 Windows XP Pro Version 2002 SP 3 下运行带有 .NET 3.5 SP 1 的 Visual
我正在尝试在Visual Studio中编译程序,但遇到FIPS加密算法错误。我已经检查了注册表项,并将其设置为false。 有什么建议? 最佳答案 我也很难过。转到HKEY_LOCAL_MACHIN
我们的应用程序有几个部分正在使用 AJAX.NET 5.7.25.1。我们的服务器管理员已启用 FIPS,但我们遇到了以下错误: 此实现不是 Windows 平台 FIPS 验证加密算法的一部分。 调
我所在的组织必须满足 FISMA 对启用 FIPS 的系统的要求。我正在尝试做的一件事是为我们的密码实现哈希算法。我对此有很多选择:SHA-2、MD5、bcrypt(使用 Blowfish)、RIPE
我想知道,android的密码库(javax.crypto)是“validated to FIPS 140-2”吗? 我需要 FIPS 很重要的特定产品。 最佳答案 不,javax.crypto 未通
如果我的 Android 应用仅使用提供的加密算法,我想知道它是否符合 FIPS 140-2 here ?我使用 SpongyCaSTLe 来实现这些算法。 编辑:一个普遍的问题:像 BouncyCa
我很少有应用程序使用 openssl 加密库。当我需要根据 FIPS 140-2 为加密实现开机自检时 - 1) 是否应该只在系统启动时执行一次? (或者)2) 每个应用程序何时开始使用加密库? 谢谢
当强制使用符合 FIPS 的算法的 Windows 设置打开时,如果有一个应用程序在该机器上运行使用不符合 FIPS 的算法,并且该应用程序会抛出异常,说明它不是 Windows FIPS 的一部分执
为什么 MD5CryptoServiceProvider 没有抛出 FIPS 合规性错误的任何想法。我正在使用 Win7 和 3.5 框架。 MS 文档说它不符合 FIPS,但我没有像使用其他一些算法
进程文件: FIPS or FIPS.EXE 进程名称: Dos Partition Manager 进程类别:存在安全风险的进程 英文描述: FIPS.EXE is a MS-DOS ap
我是一名优秀的程序员,十分优秀!