RSA证书签名值验签

  RSA签名在线验证

    最近小编在B站学习了RSA数据包的流量解析,下面总结一下学习笔记。

        对于使用HTTP协议的数据包,可以通过流量分析得到,以下信息:

第一步:通过过滤器筛选出HTTP流量

第二步:找到服务器返回成功的数据包,右击追踪流,选择TCP流

          通过查找login命令,快速查找到以下信息。

第三步:先导出证书,查看证书是否为已知证书

           注意,仅复制证书值。

导出证书如下:

         根据证书信息可知,该证书为用户身份鉴别的上级证书,可以继续下一步。(一般而言,数流量找对的前提下,该证书不会错,因为将HTML信息导出可发现,该HTML的结果为用户登录操作界,如下图:)

第四步:提取证书公钥

       首先将证书转为base64编码,如下:

          转码后证书格式如下:

           通过证书解析工具,解析证书公钥:

第五步:导出签名数据和随机数,并转为16进制

         注意:此处随机数不一定为base64编码,有可能为ASCII编码。

 第六步:通过RSA 签名在线工具,在线验签

         第一次实验不成功,由于编码原因,第二次将随机数通过ASCII转16进制成功

      验签在密评中的应用

        通过以上介绍,小编相信小伙伴们对验签操作有了一定了解,那么接下来对用户使用智能密码钥匙登录进行验签操作。

第一步:同理,先找到登录的数据流量

        通过http命令过滤出HTTP流量,找到POST流量,得出以下信息:

第二步:导出证书、提取公钥,将签名数据和随机数转换成16进制

     证书导出

    证书提取

   签名数据转16进制

     随机数转16进制

第三步:RSA签名值在线验证

通过验签发现,该证书对数据签名时使用了SHA1算法,不符合测评要求。

以上是小编的学习笔记,希望对小伙伴有所帮助,欢迎留言指正

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RSA数字签名验签是一种非对称加密技术,可以实现对数据的安全传输和验证。在C++中可以通过openssl库来实现RSA数字签名验签。 下面是RSA数字签名验签的C++代码示例: ```c++ #include <openssl/rsa.h> #include <openssl/pem.h> #include <openssl/err.h> #include <string> using namespace std; // RSA数字签名 string rsa_sign(const string& data, const string& private_key_file) { RSA* rsa = NULL; FILE* fp = NULL; string sign_data; if ((fp = fopen(private_key_file.c_str(), "r")) == NULL) { return ""; } rsa = PEM_read_RSAPrivateKey(fp, NULL, NULL, NULL); if (rsa == NULL) { ERR_print_errors_fp(stderr); fclose(fp); return ""; } unsigned char sha256_data[SHA256_DIGEST_LENGTH]; SHA256((const unsigned char*)data.c_str(), data.length(), sha256_data); unsigned int sign_len = RSA_size(rsa); unsigned char* sign = new unsigned char[sign_len]; memset(sign, 0, sign_len); if (RSA_sign(NID_sha256, sha256_data, SHA256_DIGEST_LENGTH, sign, &sign_len, rsa) == 1) { sign_data.assign((char*)sign, sign_len); } RSA_free(rsa); fclose(fp); delete[] sign; return sign_data; } // RSA验签 bool rsa_verify(const string& data, const string& sign_data, const string& public_key_file) { RSA* rsa = NULL; FILE* fp = NULL; bool result = false; if ((fp = fopen(public_key_file.c_str(), "r")) == NULL) { return false; } rsa = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL); if (rsa == NULL) { ERR_print_errors_fp(stderr); fclose(fp); return false; } unsigned char sha256_data[SHA256_DIGEST_LENGTH]; SHA256((const unsigned char*)data.c_str(), data.length(), sha256_data); result = RSA_verify(NID_sha256, sha256_data, SHA256_DIGEST_LENGTH, (unsigned char*)sign_data.c_str(), sign_data.length(), rsa); RSA_free(rsa); fclose(fp); return result; } ``` 其中,`rsa_sign`函数实现RSA数字签名,`data`参数为需要签名的数据,`private_key_file`参数为私钥文件路径,函数返回签名后的数据。`rsa_verify`函数实现RSA验签,`data`参数为原始数据,`sign_data`参数为签名后的数据,`public_key_file`参数为公钥文件路径,函数返回验签结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值