bool Auth::verify(std::string secret, std::string text) { unsigned char h[SHA256_DIGEST_LENGTH]; std::string t = std::to_string(this->id) + secret + text; if(!SHA256 ((const unsigned char *)t.c_str(), t.size(), h)) { std::cout << KCYN << "SHA1 failed" << KNRM << std::endl; exit(0); } return (this->hash == h); }
时间: 2024-04-15 17:24:50 浏览: 73
这段代码定义了一个名为`verify`的成员函数,用于验证`Auth`对象的哈希值是否与传入的秘钥和文本的哈希值相等。函数接受两个参数:一个字符串`secret`和一个字符串`text`。
函数内部首先声明了一个`unsigned char`数组`h`,用于存储对拼接后的字符串进行SHA256哈希后的结果。
然后,函数将对象的`id`、`secret`和`text`按照一定顺序拼接成一个新的字符串`t`。
接下来,函数使用SHA256函数对字符串`t`进行哈希,并将结果存储在数组`h`中。如果SHA256函数调用失败,将打印错误信息并退出程序。
最后,函数返回比较对象的哈希值和数组`h`是否相等的结果。如果相等,则返回`true`,否则返回`false`。
相关问题
bool verifyText(std::string text, RSA_key pub, unsigned char sign[SIGN_LEN]) { size_t signLen = SIGN_LEN; unsigned char hash[SHA256_DIGEST_LENGTH]; if (!SHA256 ((const unsigned char *)text.c_str(), text.size(), hash)) { std::cout << KCYN << "SHA1 failed" << KNRM << std::endl; exit(0); } bool b = RSA_verify(NID_sha256, hash, SHA256_DIGEST_LENGTH, sign, signLen, pub); return b; }
这段代码定义了一个名为`verifyText`的函数,用于验证文本的签名是否有效。函数接受三个参数:一个字符串`text`,一个`RSA_key`结构体`pub`和一个`unsigned char`数组`sign`。
函数内部首先声明了两个变量:`signLen`用于存储签名的长度,`hash`用于存储对文本进行SHA256哈希后的结果。
接下来,函数使用SHA256函数对`text`进行哈希,并将结果存储在`hash`数组中。如果SHA256函数调用失败,将打印错误信息并退出程序。
然后,函数调用`RSA_verify`函数来验证签名。该函数返回一个布尔值,表示验证结果。如果验证成功,则返回`true`,否则返回`false`。
最后,函数返回验证结果。
bool verifyText(std::string text, EVP_key pub, unsigned char sign[SIGN_LEN]) { if(DEBUG) { std::cout << KCYN << "verifying text using EC" << KNRM << std::endl; } unsigned int signLen = SIGN_LEN; unsigned char hash[SHA256_DIGEST_LENGTH]; if(!SHA256 ((const unsigned char *)text.c_str(), text.size(), hash)) { std::cout << KCYN << "SHA1 failed" << KNRM << std::endl; exit(0); } // setting up context EVP_PKEY_CTX * key_ctx = EVP_PKEY_CTX_new(pub,NULL); EVP_PKEY_verify_init(key_ctx); EVP_PKEY_CTX_set_signature_md(key_ctx, EVP_sha256()); bool b = EVP_PKEY_verify(key_ctx, sign, signLen, hash, SHA256_DIGEST_LENGTH); EVP_PKEY_CTX_free(key_ctx); return b; }
这段代码定义了一个名为verifyText的函数,用于验证文本的签名是否有效。函数接受三个参数:一个字符串text,一个EVP_key结构体pub和一个unsigned char数组sign。
函数内部首先检查是否定义了DEBUG宏。如果定义了DEBUG宏,将打印一条信息"verifying text using EC"。
接下来,函数声明了两个变量:signLen用于存储签名的长度,hash用于存储对文本进行SHA256哈希后的结果。
然后,函数使用SHA256函数对text进行哈希,并将结果存储在hash数组中。如果SHA256函数调用失败,将打印错误信息并退出程序。
接着,函数设置上下文,并使用EVP_PKEY_verify_init函数初始化验证操作。然后使用EVP_PKEY_CTX_set_signature_md函数设置签名算法为EVP_sha256()。
接下来,函数调用EVP_PKEY_verify函数来验证签名。该函数返回一个布尔值,表示验证结果。如果验证成功,则返回true,否则返回false。
最后,函数使用EVP_PKEY_CTX_free函数释放上下文,并返回验证结果。
阅读全文