mac上面获取文件的sha256值

shasum -a 256 1579507071347wjy3z.mp4
b409c885dcea82fcba037e6382694ba97b7d56e2ce9a40b20d7ae953884ae656  1579507071347wjy3z.mp4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 OpenSSL 库在 C++ 中实现读取 pem 公钥文件SHA256 签名函数的示例代码: ```cpp #include <iostream> #include <fstream> #include <openssl/evp.h> #include <openssl/pem.h> #include <openssl/sha.h> std::string sha256(const std::string& message, const std::string& publicKeyPath) { // 读取公钥文件 std::ifstream publicKeyFile(publicKeyPath); if (!publicKeyFile.is_open()) { std::cerr << "Error: failed to open public key file." << std::endl; return ""; } std::string publicKeyStr((std::istreambuf_iterator<char>(publicKeyFile)), std::istreambuf_iterator<char>()); publicKeyFile.close(); // 转换公钥字符串为 EVP_PKEY 对象 BIO* publicKeyBio = BIO_new_mem_buf(publicKeyStr.c_str(), -1); EVP_PKEY* publicKey = PEM_read_bio_PUBKEY(publicKeyBio, nullptr, nullptr, nullptr); BIO_free(publicKeyBio); if (!publicKey) { std::cerr << "Error: failed to read public key." << std::endl; return ""; } // 计算 SHA256 摘要 EVP_MD_CTX* mdCtx = EVP_MD_CTX_new(); EVP_DigestInit(mdCtx, EVP_sha256()); EVP_DigestUpdate(mdCtx, message.c_str(), message.length()); unsigned char digest[SHA256_DIGEST_LENGTH]; unsigned int digestLen; EVP_DigestFinal(mdCtx, digest, &digestLen); EVP_MD_CTX_free(mdCtx); // 使用公钥进行签名 size_t sigLen = EVP_PKEY_size(publicKey); unsigned char* sig = new unsigned char[sigLen]; EVP_MD_CTX* sigCtx = EVP_MD_CTX_new(); EVP_SignInit(sigCtx, EVP_sha256()); EVP_SignUpdate(sigCtx, digest, digestLen); int sigLenActual; if (!EVP_SignFinal(sigCtx, sig, (unsigned int*)&sigLenActual, publicKey)) { std::cerr << "Error: failed to sign message." << std::endl; return ""; } EVP_MD_CTX_free(sigCtx); std::string signature((char*)sig, sigLenActual); delete[] sig; EVP_PKEY_free(publicKey); return signature; } ``` 使用示例: ```cpp std::string message = "Hello, World!"; std::string publicKeyPath = "/path/to/public/key.pem"; std::string signature = sha256(message, publicKeyPath); std::cout << "Signature: " << signature << std::endl; ``` 请注意,此示例仅适用于 RSA 公钥,如果您使用的是其他类型的公钥,请相应更改公钥读取和签名代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值