首页主机资讯ubuntu下openssl如何验证签名

ubuntu下openssl如何验证签名

时间2025-12-15 16:36:05发布访客分类主机资讯浏览542
导读:在Ubuntu下使用OpenSSL验证签名,可以按照以下步骤进行: 方法一:使用OpenSSL命令行工具 准备文件: 签名文件(通常是.sig或.pem格式)。 要验证的原始数据文件(可以是文本文件或其他格式)。 如果签名是使用私钥生...

在Ubuntu下使用OpenSSL验证签名,可以按照以下步骤进行:

方法一:使用OpenSSL命令行工具

  1. 准备文件

    • 签名文件(通常是.sig.pem格式)。
    • 要验证的原始数据文件(可以是文本文件或其他格式)。
    • 如果签名是使用私钥生成的,还需要公钥文件(通常是.pem格式)。
  2. 验证签名: 打开终端,使用以下命令进行验证:

    openssl dgst -sha256 -verify public_key.pem -signature signature_file.sig original_data_file
    

    解释:

    • -sha256:指定使用的哈希算法(这里使用SHA-256,可以根据需要更改)。
    • -verify public_key.pem:指定公钥文件。
    • -signature signature_file.sig:指定签名文件。
    • original_data_file:指定要验证的原始数据文件。

    如果验证成功,终端会显示Verified OK。如果验证失败,会显示错误信息。

方法二:使用OpenSSL库(编程方式)

如果你需要在程序中使用OpenSSL库来验证签名,可以参考以下示例代码(使用C语言):

#include <
    openssl/pem.h>
    
#include <
    openssl/rsa.h>
    
#include <
    openssl/sha.h>
    
#include <
    openssl/err.h>
    
#include <
    stdio.h>
    
#include <
    string.h>


int verify_signature(const char *public_key_file, const char *signature_file, const char *original_data_file) {
    
    FILE *pub_key_fp = fopen(public_key_file, "r");

    if (!pub_key_fp) {
    
        fprintf(stderr, "Failed to open public key file\n");
    
        return 0;

    }
    

    RSA *rsa_public_key = PEM_read_RSA_PUBKEY(pub_key_fp, NULL, NULL, NULL);
    
    fclose(pub_key_fp);

    if (!rsa_public_key) {
    
        fprintf(stderr, "Failed to read public key\n");
    
        return 0;

    }
    

    FILE *sig_fp = fopen(signature_file, "rb");

    if (!sig_fp) {
    
        fprintf(stderr, "Failed to open signature file\n");
    
        RSA_free(rsa_public_key);
    
        return 0;

    }
    

    unsigned char *signature = malloc(RSA_size(rsa_public_key));
    
    size_t sig_len;

    if (fread(signature, 1, RSA_size(rsa_public_key), sig_fp) != RSA_size(rsa_public_key)) {
    
        fprintf(stderr, "Failed to read signature\n");
    
        free(signature);
    
        fclose(sig_fp);
    
        RSA_free(rsa_public_key);
    
        return 0;

    }
    
    sig_len = RSA_size(rsa_public_key);
    
    fclose(sig_fp);
    

    FILE *data_fp = fopen(original_data_file, "rb");

    if (!data_fp) {
    
        fprintf(stderr, "Failed to open original data file\n");
    
        free(signature);
    
        RSA_free(rsa_public_key);
    
        return 0;

    }
    

    unsigned char *data = malloc(RSA_size(rsa_public_key));
    
    size_t data_len;

    if (fread(data, 1, RSA_size(rsa_public_key), data_fp) != RSA_size(rsa_public_key)) {
    
        fprintf(stderr, "Failed to read original data\n");
    
        free(signature);
    
        free(data);
    
        fclose(data_fp);
    
        RSA_free(rsa_public_key);
    
        return 0;

    }
    
    data_len = RSA_size(rsa_public_key);
    
    fclose(data_fp);
    

    int result = RSA_verify(NID_sha256, data, data_len, signature, sig_len, rsa_public_key);
    
    free(signature);
    
    free(data);
    
    RSA_free(rsa_public_key);


    if (result == 1) {
    
        printf("Signature is valid\n");
    
        return 1;

    }
 else if (result == 0) {
    
        printf("Signature is invalid\n");
    
        return 0;

    }
 else {
    
        fprintf(stderr, "Verification failed due to error\n");
    
        ERR_print_errors_fp(stderr);
    
        return 0;

    }

}


int main() {
    
    const char *public_key_file = "public_key.pem";
    
    const char *signature_file = "signature_file.sig";
    
    const char *original_data_file = "original_data_file";
    

    verify_signature(public_key_file, signature_file, original_data_file);
    

    return 0;

}
    

注意事项

  • 确保OpenSSL库已安装:sudo apt-get install libssl-dev
  • 根据实际情况调整哈希算法(如SHA-256、SHA-512等)。
  • 处理错误信息时,可以使用ERR_print_errors_fp(stderr)来打印详细的错误信息。

通过以上方法,你可以在Ubuntu下使用OpenSSL验证签名。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: ubuntu下openssl如何验证签名
本文地址: https://pptw.com/jishu/771789.html
Linux上Tomcat如何配置JVM参数 openssl如何配置ubuntu服务器

游客 回复需填写必要信息