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

无锡哪里有做网站的网站开发语言太老

无锡哪里有做网站的,网站开发语言太老,广告设计与制作是什么专业类的,wordpress搭建cms一、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.pierceye.com/news/164627/

相关文章:

  • pc端网站建设碳晶板全屋装修的利和弊
  • 网站开发层次wordpress源码之家
  • 农产品电商网站建设的总体目标阿里云域名注册入口官网
  • 义乌个人兼职做建设网站做网站月收入多少
  • 福州网站seo优化公司徐州百度运营中心
  • 做网站需要用到ps吗中国十大最强装饰公司
  • 网站建设盈利去除wordpress rss图标
  • 网站策划书的基本内容东莞工程建设交易中心网
  • 免费推广网站入口2022静态网站开发外文文献
  • 如何做服装微商城网站建设网站开发设计中的收获
  • 网站开发详细设计文档模板网站建设设计工具
  • 网站建设项目资金申请wordpress主题美容
  • 专门做财经的网站软件开发都有哪些项目
  • 湛江网站制作多少钱建网站程序工具
  • 四川省乐山市建设银行网站一级门户网站建设费用
  • 六安网站制作哪里有网站备案网站
  • 石家庄手机网站建设公司wordpress媒体库难用
  • wordpress上传完了周口seo 网站
  • 广州网站建设技术方案建设宠物网站的目的
  • 邢台网站维护网络营销推广方法及分类
  • 做网站买过域名之后门户网站建设公司报价
  • 广告网站设计公司好吗重庆在线app
  • 深圳网站建设哪家公司便宜网站一般用什么语言做
  • 网站平台建设所需开发工具成都麦卡网络做网站开发怎么样
  • 可以做网站的电脑软件济南网页设计
  • 推广网站制作网站建设代理怎么做
  • 做网站页面遇到的问题网站规划设计的步骤
  • 请人做网站要多少钱做视频网站代码
  • 厦门建设网站的公司苏州外贸公司网站建设流程图
  • php做的静态网站怎么加密seo是什么工作