当前位置: 首页 > news >正文

网络平台怎么搭建网站广州网站建设开发设计

网络平台怎么搭建网站,广州网站建设开发设计,太原做响应式网站设计,wordpress 不换行一、SM2算法介绍 SM2#xff08;国密算法2#xff09; 是中国国家密码管理局#xff08;CNCA#xff09;颁布的椭圆曲线密码算法标准#xff0c;属于非对称加密算法。它基于椭圆曲线离散对数问题#xff0c;提供了安全可靠的数字签名、密钥交换和公钥加密等功能。SM2被设…一、SM2算法介绍 SM2国密算法2 是中国国家密码管理局CNCA颁布的椭圆曲线密码算法标准属于非对称加密算法。它基于椭圆曲线离散对数问题提供了安全可靠的数字签名、密钥交换和公钥加密等功能。SM2被设计为适用于各种场景下的密码学应用包括数字证书、数据加密、数字签名、身份认证等。 以下是SM2算法的一些关键特点和概要介绍 非对称加密算法 SM2是一种非对称加密算法意味着它使用两个密钥公钥和私钥。公钥用于加密数据和验证签名而私钥用于解密数据和生成签名。 椭圆曲线密码学 SM2基于椭圆曲线密码学Elliptic Curve CryptographyECC使用椭圆曲线上的点运算来实现加密和签名操作。 安全性 SM2采用了高强度的椭圆曲线参数保障了算法的安全性。在适当的参数选择下SM2被认为是安全可靠的。 性能优越 与传统的RSA算法相比SM2在相同安全性水平下使用更短的密钥长度提供了更高的性能。 国家标准 SM2是中国国家密码算法标准适用于中国国内的各种密码学应用包括政府、金融、电信等领域。 数字签名和密钥交换 SM2可以用于生成数字签名验证签名的有效性以及进行安全的密钥交换用于建立安全的通信通道。 由于SM2是中国的国家密码标准它在中国国内得到了广泛的应用。SM2不仅提供了高度的安全性还具备较好的性能适用于多种密码学场景。 二、SM2代码实例 2.1 SM2加密 / SM2解密 以下是一个简单的C代码示例演示了如何使用OpenSSL库进行SM2加密和解密。在这个示例中我们将SM2加密和解密的功能拆分为两个函数sm2_encrypt() 和 sm2_decrypt()。 请注意使用此示例代码前请确保你的系统已经安装了OpenSSL库并且链接时正确引入了OpenSSL的库文件。该示例仅供学习和参考实际应用中你需要根据你的需求和安全性要求进行更严格的错误处理和参数验证。 #include openssl/evp.h #include openssl/sm2.h #include iostream #include stringstd::string sm2_encrypt(const std::string plaintext, EVP_PKEY *pubkey) {EVP_PKEY_CTX *ctx;unsigned char *ciphertext nullptr;size_t ciphertext_len;// 创建EVP_PKEY_CTXctx EVP_PKEY_CTX_new(pubkey, nullptr);if (!ctx) {std::cerr Error creating EVP_PKEY_CTX for encryption std::endl;return ;}// 初始化加密操作if (EVP_PKEY_encrypt_init(ctx) 0) {std::cerr Error initializing encryption operation std::endl;EVP_PKEY_CTX_free(ctx);return ;}// 设置加密参数这里可以设置一些参数例如填充方式// EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING);// 计算加密后的长度if (EVP_PKEY_encrypt(ctx, nullptr, ciphertext_len, reinterpret_castconst unsigned char*(plaintext.c_str()), plaintext.length()) 0) {std::cerr Error computing ciphertext length std::endl;EVP_PKEY_CTX_free(ctx);return ;}// 分配内存并执行加密操作ciphertext new unsigned char[ciphertext_len];if (EVP_PKEY_encrypt(ctx, ciphertext, ciphertext_len, reinterpret_castconst unsigned char*(plaintext.c_str()), plaintext.length()) 0) {std::cerr Error encrypting data std::endl;delete[] ciphertext;EVP_PKEY_CTX_free(ctx);return ;}// 释放资源EVP_PKEY_CTX_free(ctx);// 返回加密后的数据Base64编码std::string encoded_ciphertext(reinterpret_castchar*(ciphertext), ciphertext_len);delete[] ciphertext;return encoded_ciphertext; }std::string sm2_decrypt(const std::string ciphertext, EVP_PKEY *privkey) {EVP_PKEY_CTX *ctx;unsigned char *plaintext nullptr;size_t plaintext_len;// 创建EVP_PKEY_CTXctx EVP_PKEY_CTX_new(privkey, nullptr);if (!ctx) {std::cerr Error creating EVP_PKEY_CTX for decryption std::endl;return ;}// 初始化解密操作if (EVP_PKEY_decrypt_init(ctx) 0) {std::cerr Error initializing decryption operation std::endl;EVP_PKEY_CTX_free(ctx);return ;}// 计算解密后的长度if (EVP_PKEY_decrypt(ctx, nullptr, plaintext_len, reinterpret_castconst unsigned char*(ciphertext.c_str()), ciphertext.length()) 0) {std::cerr Error computing plaintext length std::endl;EVP_PKEY_CTX_free(ctx);return ;}// 分配内存并执行解密操作plaintext new unsigned char[plaintext_len];if (EVP_PKEY_decrypt(ctx, plaintext, plaintext_len, reinterpret_castconst unsigned char*(ciphertext.c_str()), ciphertext.length()) 0) {std::cerr Error decrypting data std::endl;delete[] plaintext;EVP_PKEY_CTX_free(ctx);return ;}// 释放资源EVP_PKEY_CTX_free(ctx);// 返回解密后的数据std::string decrypted_plaintext(reinterpret_castchar*(plaintext), plaintext_len);delete[] plaintext;return decrypted_plaintext; }int main() {EVP_PKEY *pubkey nullptr;EVP_PKEY *privkey nullptr;// 生成SM2密钥对if (!EVP_PKEY_keygen_SM2(pubkey, privkey)) {std::cerr Error generating SM2 key pair std::endl;return 1;}std::string plaintext Hello, SM2!;std::string ciphertext sm2_encrypt(plaintext, pubkey);std::string decrypted_text sm2_decrypt(ciphertext, privkey);std::cout Original Text: plaintext std::endl;std::cout Encrypted Text: ciphertext std::endl;std::cout Decrypted Text: decrypted_text std::endl;EVP_PKEY_free(pubkey);EVP_PKEY_free(privkey);return 0; }请确保在实际使用时对错误进行适当处理并根据实际需求进行参数配置。此示例中使用了OpenSSL提供的SM2密钥生成函数加密和解密操作的结果以字符串形式输出。在实际应用中你可能需要对加密后的数据进行Base64编码以方便传输。 2.2 SM2签名 2.2.1 SM2签名步骤 SM2签名的过程通常包括以下步骤 生成密钥对 签名方首先需要生成自己的SM2公钥和私钥。公钥用于验证签名私钥用于生成签名。 计算消息的哈希值 对待签名的消息进行哈希操作通常使用SM3算法生成消息的摘要哈希值。 生成随机数 生成一个随机数称为k该随机数需要满足一定的条件以保障签名的安全性。在SM2中k的生成需要满足一定的随机性和不可预测性。 计算椭圆曲线点 使用随机数k计算椭圆曲线上的点k * G其中G是椭圆曲线的基点得到一个椭圆曲线点x1, y1。 计算r值 将椭圆曲线点的横坐标x1对一个固定数取模得到一个整数r。如果r等于0则需要重新选择随机数k并重新计算。 计算s值 计算签名的另一个部分s公式为 s ( ( h a s h r ⋅ d ) / k ) m o d n s ((hash r \cdot d) / k) \mod n s((hashr⋅d)/k)modn 其中hash是消息的哈希值d是私钥n是椭圆曲线的阶数。 验证r和s 将r和s作为签名的两个组成部分并与消息一起发送给验证方。验证方使用签名者的公钥、消息的哈希值、r和s进行验证。验证的详细步骤包括使用公钥计算椭圆曲线点验证r的范围和计算(s \cdot G r \cdot PK)等。如果验证通过则签名有效。 在SM2签名过程中随机数k的选择和签名的正确性非常关键不当的随机数选择可能导致签名的不安全性。因此在实际应用中随机数的生成需要特别注意通常使用专门的随机数生成库或硬件随机数生成模块来确保随机性和不可预测性。 2.2.2 SM2签名C开发实例 2.3 SM2密钥交换 2.3.1 SM2密钥交换步骤 是的SM2算法可以用于密钥交换。在SM2中密钥交换是通过Diffie-Hellman密钥交换协议的椭圆曲线密码学版本来实现的。SM2密钥交换的过程基于椭圆曲线离散对数问题该问题在椭圆曲线密码学中是困难的因此使得SM2密钥交换具备了很高的安全性。 SM2密钥交换的流程通常包括以下步骤 生成临时密钥对 通信双方分别生成自己的临时私钥和对应的临时公钥。这两个临时密钥对仅在当前密钥交换会话中使用。 计算共享秘密 通信双方分别使用自己的临时私钥和对方的临时公钥通过椭圆曲线上的点运算计算出一个共享的秘密值。 生成共享密钥 使用共享的秘密值作为密钥生成算法的输入生成对称密钥该密钥可以用于后续的加密和解密通信内容。 销毁临时密钥 在生成共享密钥之后临时私钥和临时公钥可以被销毁因为它们不再需要。 SM2密钥交换的安全性建立在椭圆曲线离散对数问题的困难性上确保了在不共享密钥的情况下通信双方可以协商出一个共享密钥从而实现了安全的密钥交换。 三、openssl SM2 命令操作 3.1 openssl SM2 加密 3.2 openssl sm2 解密 3.3 openssl SM2 签名 3.3 openssl SM2 验签签名校验
http://www.sadfv.cn/news/246061/

相关文章:

  • 网站商城建设报告营销策划书范文大全
  • 网站能带来什么wordpress首页代码压缩
  • 建设手机银行官方网站wordpress重装空白
  • 如何推广运营网站网站做的和别人一样违法吗
  • 天水市住房和城乡建设局网站学校网站 建设 价格
  • asp程序网站后台发布产品的时候前台怎么不显示产品名称广州公司建设网站
  • 俞润装饰做哪几个网站ps课堂网站
  • 下载学校网站模板下载地址建设部指定发布招标信息网站
  • 自己的做网站重庆南昌网站建设
  • 视频网站开发要多少钱wordpress 文章打不开
  • 静态网站模板 大气商城网站规划
  • 上街区做网站关于建立网站的计划
  • 网站百度收录突然消失了徐州铜山区
  • 江苏恒健建设集团有限公司网站怎么写微信小程序
  • 企业大型网站建设要多少钱咋样做网站
  • 做服装加工哪个网站比较好windows优化大师怎么使用
  • 北京建设网站官网热门推广平台
  • 电影网站免费建设视频网站怎么做网站引流
  • 齐齐哈尔北京网站建设南昌正规网站公司吗
  • 大连电子商务网站建设免费私人直播间 哔哩哔哩
  • 国内做外贸的网站网站开发后台需要什么技术
  • 服务器搭建网站数据库网站租用服务器价格
  • 网站后台数据库下载友情链接在线观看
  • tomcat做的网站打不开了上海外贸网站建设公司价格
  • 买一个网站多少钱岳阳市官网
  • 济南网站优化推广公司凡科网站怎么做淘宝客
  • 青白江建设局网站快速建立平台网站开发网站模板设计
  • 广东大唐建设网站百度云虚拟主机上传wordpress
  • 网站备案号在哪儿查询怎么使用网站上的模板
  • 免费word文档模板下载网站nas搭建网站