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

上海发布公众号官网西安网站seo 优帮云

上海发布公众号官网,西安网站seo 优帮云,wordpress两个头部,智能建站网一、AES算法 AES是一种对称加密算法,算法秘钥长度可为128位(16字节)、192位(24字节)、256位(32字节)。加密模式分为ECB、CBC、CTR等,其中ECB模式最简单够用。现给出ECB模式下C和Java的实现,并且可以相互加解密验证。 二、AES_ECB实现DEMO …

一、AES算法

AES是一种对称加密算法,算法秘钥长度可为128位(16字节)、192位(24字节)、256位(32字节)。加密模式分为ECB、CBC、CTR等,其中ECB模式最简单够用。现给出ECB模式下C++和Java的实现,并且可以相互加解密验证。

二、AES_ECB实现DEMO

2.1 C++版本

#include <string>
#include <vector>
#include <openssl/evp.h>EVP_CIPHER *getAlgPoint(const int keyLen){EVP_CIPHER *pAlg = nullptr;if (keyLen <= 16) {pAlg = (EVP_CIPHER *)EVP_aes_128_ecb();}else if (keyLen >16 && keyLen <= 24) {pAlg = (EVP_CIPHER *)EVP_aes_192_ecb();}else{pAlg = (EVP_CIPHER *)EVP_aes_256_ecb();}return pAlg;
}std::vector<uint8_t> ecbEncrypt(const std::string &key, const std::string &str){if (key.empty() || str.empty()) {return {};}int encLen = 0;int outlen = 0;EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new();std::vector<uint8_t > encData(((str.size()/16)+1) * 16);//加密后的长度是16的整数倍,明文刚好16整数倍则密文是明文长度+16字节EVP_CipherInit_ex(ctx, getAlgPoint(key.size()), nullptr, (uint8_t*)key.data(), nullptr, 1);EVP_CipherUpdate(ctx, encData.data(), &outlen, (const uint8_t *)str.c_str(), (int)str.size());encLen = outlen;EVP_CipherFinal_ex(ctx, encData.data() + outlen, &outlen);encLen += outlen;EVP_CIPHER_CTX_free(ctx);encData.resize(encLen);return encData;
}std::string ecbDecrypt(const std::string &key, const std::vector<uint8_t> &str){if (key.empty() || str.empty()) {return "";}int decLen = 0;int outlen = 0;EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new();std::vector<uint8_t > decData(str.size());EVP_CipherInit_ex(ctx, getAlgPoint(key.size()), nullptr, (uint8_t*)key.data(), nullptr, 0);EVP_CipherUpdate(ctx, decData.data(), &outlen, str.data(), (int)str.size());decLen = outlen;EVP_CipherFinal(ctx, decData.data() + outlen, &outlen);decLen += outlen;EVP_CIPHER_CTX_free(ctx);decData.resize(decLen);return std::string((char*)decData.data(), decData.size());
}int main(void){std::string tKey32 = "12345678901234567890123456789012";std::string tSrcMsg = "Hello World!";auto byteEnc = ecbEncrypt(tKey32, tSrcMsg);auto b64Enc = B64::encode(byteEnc.data(), byteEnc.size());//转base64打印加密后的内容, b64转换函数自己实现std::cout<<"b64Enc:" << b64Enc <<std::endl;auto strDec = ecbDecrypt(tKey32, byteEnc);std::cout<<"decMsg:"<< strDec<<std::endl;return 0;}
  • demo运行结果
b64Enc:wC/nIjhaktigwT5VfVYXKA==
decMsg:Hello World!

2.2 Java版本

  • AESUtil.java
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;public class AESUtil {private static final String ALGORITHM = "AES";private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";public static String encrypt(String plainText, String key) throws Exception{SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), ALGORITHM);Cipher cipher = Cipher.getInstance(TRANSFORMATION);cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte[] eBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));return Base64.getEncoder().encodeToString(eBytes);}public static String decrypt(String encryptedText, String key) throws Exception{SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), ALGORITHM);Cipher cipher = Cipher.getInstance(TRANSFORMATION);cipher.init(Cipher.DECRYPT_MODE, secretKey);byte[] dBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));return new String(dBytes, StandardCharsets.UTF_8);}
}
  • Main.java
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;public class Main {public static void main(String[] args) throws Exception {String strkey = "12345678901234567890123456789012";String str = "Hello World!";String eStr = AESUtil.encrypt(str, strkey);System.out.println("aes256 eStr:" + eStr);String dStr = AESUtil.decrypt(eStr, strkey);System.out.println("aes256 dStr:" + dStr);}
}
  • demo运行结果
aes256 eStr:wC/nIjhaktigwT5VfVYXKA==
aes256 dStr:Hello World!

C++与Java的运行结果一致,如果测试128、192位秘钥,只用修改main函数中的秘钥长度,其他部分不用改动。

http://www.yayakq.cn/news/116407/

相关文章:

  • 网站怎样建设苏州企业网站建设开发
  • 六安网站排名优化电话网站访问统计方案
  • 极客学院 网站建设合肥 电子商务 网站推广
  • 低价建网站图片制作用什么软件
  • 创建自己的个人网站抖音评论点赞自助网站
  • 网站开发实用技术知识点奉节做网站
  • 安庆做网站公司卫生网站建设方案
  • 做任务提现的网站网站浏览历史怎么查看
  • 做公众号的必备参考网站电子商务网站建设的平台
  • 刚做的单页网站怎么预览有人做家具网站中介吗
  • 网站开发的意义无锡企业网站的建设
  • 网站后台登录界面怎么做一种网站为别人宣传
  • 免费做效果图的网站查域名备案信息
  • 网站关键词排名突然没了网站建设与管理期末考试
  • 化妆品网站建设项目计划书为什么很多网站在维护
  • 建设网站项目的目的是什么意思从零学习做网站
  • 网站建设设计费用一般通过头发就能察觉到
  • 零食网站建设策划书模板wordpress footer错位
  • 杭州市拱墅区建设局网站十堰网站推广哪家专业
  • 提取卡密网站怎么做西宁集团网站建设
  • 深圳网站设计小程序俄罗斯做牙网站
  • 手机价格网站建设网站手机端做app开发工具
  • 广东建设信息网站首页6拉丝机东莞网站建设
  • 网站建设的工作人员适合企业网站的cms
  • 建筑公司网站董事长致辞网站架设教程
  • 菜鸟做网站搭建网站需要多少钱
  • 做视频链接的网站吗产业互联网公司排名
  • 方圆网通网站建设公司上海建筑设计院院长
  • 鞋帽箱包网站建设行业门户网站开发
  • 网站整站优化方案网站有中文源码加英文怎么做