C++与java、php通用解密,openssl
来源:互联网 发布:蛋疼 知乎 编辑:程序博客网 时间:2024/06/05 04:08
RSA验证:
char *pData = "123456";static unsigned char ptext_ex[218] = {0};static unsigned char ctext_ex[218] = {0};int plen = 0;int clen = 0;EVP_MD_CTX ctxl; EVP_MD_CTX_init(&ctxl);//初始化EVP_SignInit(&ctxl,EVP_sha1());//将需要使用的摘要算法存入ctxl中EVP_SignUpdate(&ctxl,(unsigned char *)pData,strlen(pData));//存入证书的编码值EVP_DigestFinal(&ctxl,ptext_ex,(unsigned int*)&plen);//求取编码的长度为m_len摘要值存入m中BIO *key = NULL;RSA *r = NULL;key = BIO_new(BIO_s_file());BIO_read_filename(key, "d:\\privateKey.txt");r = PEM_read_bio_RSAPrivateKey(key, NULL, NULL, NULL);BIO_free_all(key);RSA_sign(EVP_sha1()->type,(unsigned char*)ptext_ex,plen,ctext_ex,(unsigned int*)&clen,r);int iLen = 0;char p[130] = {0};std::string str = base64Encode(ctext_ex, clen);Base64Decode((unsigned char*)p, &iLen,(unsigned char*)str.c_str(), str.length());BIO *keyp = NULL;RSA *rp = NULL;keyp = BIO_new(BIO_s_file());BIO_read_filename(keyp, "d:\\rsa_public_key.pem");rp = PEM_read_bio_RSA_PUBKEY(keyp, NULL, NULL, NULL);BIO_free_all(keyp);int rc = RSA_verify(EVP_sha1()->type,(unsigned char*)ptext_ex,plen,ctext_ex, clen,rp);
RSA解密:
key = BIO_new(BIO_s_file());BIO_read_filename(key, pKeyPath);r = PEM_read_bio_RSA_PUBKEY(key, NULL, NULL, NULL);BIO_free_all(key);while (iLen < iSrclen){memset(cTmp, 0, sizeof(cTmp));memset(out, 0, sizeof(out));memcpy(cTmp, pIn, 128);pIn += 128;iLen += 128;iTmpLen = RSA_public_decrypt(128, (CT_UCHAR*)cTmp, (CT_UCHAR*)out, r, RSA_PKCS1_PADDING);iOutLen += iTmpLen;strncpy(pOut, out, iDstlen);pOut += iTmpLen;}
DES解密:
int docontinue = 1;char *pData = baseInfo; /* 明文 */int data_len = iBaseLen;int data_rest;unsigned char ch;unsigned char *src = NULL; /* 补齐后的明文 */unsigned char *dst = NULL; /* 解密后的明文 */int len;unsigned char tmp[8];unsigned char in[8];unsigned char out[512] = {0};char *k = appKey; /* 原始密钥 */DES_cblock ivec;int key_len;#define LEN_OF_KEY 24unsigned char key[LEN_OF_KEY]; /* 补齐后的密钥 */unsigned char block_key[9];DES_key_schedule ks,ks2,ks3;/* 构造补齐后的密钥 */key_len = strlen(k);memcpy(key, k, key_len);memcpy(ivec,"dbe79c9c",9);memset(key + key_len, 0x00, LEN_OF_KEY - key_len);/* 分析补齐明文所需空间及补齐填充数据 */data_rest = data_len % 8;len = data_len + (8 - data_rest);ch = 8 - data_rest;src = (unsigned char *)malloc(len);dst = (unsigned char *)malloc(len);if (NULL == src || NULL == dst){docontinue = 0;}if (docontinue){int count;int i;/* 构造补齐后的加密内容 */memset(src, 0, len);memcpy(src, pData, data_len);memset(src + data_len, ch, 8 - data_rest);/* 密钥置换 */memset(block_key, 0, sizeof(block_key));memcpy(block_key, key + 0, 8);DES_set_key_unchecked((const_DES_cblock*)block_key, &ks);memcpy(block_key, key + 8, 8);DES_set_key_unchecked((const_DES_cblock*)block_key, &ks2);memcpy(block_key, key + 16, 8);DES_set_key_unchecked((const_DES_cblock*)block_key, &ks3);/* 循环加密/解密,每8字节一次 */count = len / 8;for (i = 0; i < count; i++){memset(tmp, 0, 8);memset(in, 0, 8);memset(out, 0, 8);memcpy(tmp, src + 8 * i, 8);/* 解密 *///DES_ecb3_encrypt((const_DES_cblock*)tmp, (DES_cblock*)out, &ks, &ks2, &ks3, DES_DECRYPT);DES_ede3_cbc_encrypt((unsigned char*)baseInfo, out,240,&ks, &ks2, &ks3,(DES_cblock*)key, DES_DECRYPT);/* 将解密的内容拷贝到解密后的明文 */memcpy(dst + 8 * i, out, 8);}} sprintf(dstOut, "%s", dst);
0 0
- C++与java、php通用解密,openssl
- php与java通用AES加密解密算法
- php与java通用AES加密解密算法
- [转]php与java通用AES加密解密算法
- php与java通用AES加密解密算法
- php与java通用AES加密解密算法
- PHP与C#通用 DES 加解密
- PHP、JAVA、C#、Object-C、Android 通用的DES加密解密
- PHP、JAVA、C#、Object-C、Android 通用的DES加密解密【仅记录,未验证】
- php openssl rsa 加密解密
- php openssl加密解密方法
- php openssl加密解密方法
- JAVA和PHP通用的加解密整理版
- JAVA和PHP通用的加解密整理版
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现【多种语言AES/CBC/PKCS5Padding通用加解密数据】
- ios与android与java通用的AES加解密
- java加密解密--openSSL 用法
- java C# objective-c通用AES对称加解密
- APK Downloader – 在线从 Google Play 下载 APK 文件
- 【Unity3D自学记录】将文字复制至系统剪切板
- QQ群加入代码在线获取
- 越狱软件可带来千万量级用户
- final 关键字的使用
- C++与java、php通用解密,openssl
- java随机数(Random类和Math类)
- BigTable读书笔记
- Unix网络编程第三版源码编译
- Delphi中break、exit、abort、continue跳出的比较
- Memcached的安装
- PHP的"::"、"->"和"=>"的区别
- JavaScript中浮点数的保留小数位数的问题
- ZOJ 3765 Lights