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

怎么制作网站的二维码网站建设销售中遇到的问题

怎么制作网站的二维码,网站建设销售中遇到的问题,网上商店系统设计,专业做网站建设的公司一、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.hkea.cn/news/14417510/

相关文章:

  • 临沂专业做网站公司一个网站制作流程
  • 网站支付宝怎么做的天门网站开发
  • 网站开发业务ppt房屋设计用什么软件
  • 专业型企业网站有哪些拼多多跨境电商怎么样
  • 怎么在手机上做一个网站餐饮加盟网站制作
  • wwe中文官网站seo于刷网站点击
  • 素材网免费高端网站建设seo
  • 快速建企业网站织梦模板怎么验证网站
  • 意大利室内设计网站网站备案的幕布是什么意思
  • 怎么才能打开一些网站微信开发品牌
  • 深圳网站建设g石狮建设局网站
  • 宝安公司网站制作哪家公司好附近的装修公司地点
  • 网站群建设优点最新新闻热点事件2023小学生
  • 制作需要多少钱优化seo深圳
  • 网站怎么做微信登录界面如何制作小程序图片
  • 广州有什么好玩的海边seo难不难
  • 无锡网站备案中国3大做外贸的网站
  • 校园网站如何管理产品小程序如何制作
  • 网站seo 工具视频网站建设技术方案
  • 体育馆路网站建设免费好玩的网页游戏
  • 麻将网站怎么做的app网站开发定制
  • 专门做游戏交易的网站有哪些公司网站定制
  • 2017网站建设前景免费网站安全软件大全游戏
  • 网站如何调用微博wordpress 4.0 多站点
  • 在那些网站上做企业宣传好免费的网络营销方式
  • 杭州萧山区专门做网站的公司深圳市龙华区地图
  • 网站的内容和功能pic cms图片网站管理系统手机版
  • 汤原建设局网站搜索视频 网站开发
  • 增加网站访客好模板网站
  • 网站建设可以用350摸板深圳网络推广引流