如何使用Openssl,已经有Key文件,如何使用这个文件进行加密和解密?

bingyu_2008 2010-12-10 05:24:27
http://topic.csdn.net/u/20101210/11/9451e478-8477-48a7-9d13-04f2be0ca97f.html?seed=681358909&r=70507089#r_70507089
...全文
275 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bingyu_2008 2010-12-13
  • 打赏
  • 举报
回复
pfx文件的密码在编程中怎么使用呢?
jone7319 2010-12-13
  • 打赏
  • 举报
回复
用法:RSA_Encrypt(szKey.c_str(), 0x010001, szResponse);
jone7319 2010-12-13
  • 打赏
  • 举报
回复
你试一下我的代码

String Fetion::RSA_Encrypt(const char* modulus, int publicExponent, const char* pszClearText)
{
BIGNUM *bnn, *bne;
bnn = BN_new();
bne = BN_new();
BN_hex2bn(&bnn, modulus);
BN_set_word(bne, publicExponent);
RSA *rsa = RSA_new();
rsa->n = bnn;
rsa->e = bne;

int len = RSA_size(rsa);
unsigned char* pszCipherText = new unsigned char[len];

int nRet = RSA_public_encrypt(len-11, (const unsigned char*)pszClearText, pszCipherText, rsa, RSA_PKCS1_PADDING);

char *b=new char[nRet*2+1];
BinToHex((char *)pszCipherText,b,nRet);
b[nRet*2]='\0';
String hash=b;

delete []pszCipherText,b;

BN_clear_free(bnn);
BN_clear_free(bne);
return hash;
}
jone7319 2010-12-13
  • 打赏
  • 举报
回复
我在做飞信控件时,用到OPenssl 中的 RSA算法,不知你用的是什么算法?
bingyu_2008 2010-12-12
  • 打赏
  • 举报
回复
呃。。。救命啊!!!
bingyu_2008 2010-12-11
  • 打赏
  • 举报
回复
现在和第三方公司合作给客户开发一个东西,我这边需要将一个字符串加密以后传递给第三方公司提供的jsp页面。加密方式是第三方提供一个Key文件,就像银行网银用的文件证书一样,使用RSA方式加密的。现在第三方公司给我了两个文件:server.cer和test.pfx。
他们给的ReadME文件内容如下:
pfx证书密码:123456
pfx里包含一对公钥和私钥,可以用于解密和加密两个功能。
cer里只包含公钥,只能用于加密。
给到pfx的目的是方便你们自行测试解密后的数据是否正确,如果用cer加密的密文,用pfx可以正确解密的话,代码就没有问题了,之后我在给你具体的URL地址和正式的只包含公钥的cer key即可。

从来没接触过这东西,第三方公司全是Java工程师,也不能提供一个C++的Demo,我上网查了一些资料,说是可以使用Openssl库来做,也找了一些demo,但是都是直接加密文件的,而且运行过程中报异常。请教各位了,怎么解决!


--------------------------------------------------------------------------------
我自己写了一个,运行到PEM_read_RSAPublicKey的时候出错,各位帮忙把把脉,还有我的私钥是有密码的:123456,这个怎么加进去呢?

#include <string.h>
#include <memory.h>
#include <openssl/rsa.h>
#include <openssl/applink.c>
#include <openssl/pem.h>

#define PUBLICKEY "server.cer"
#define PRIVATEKEY "test.pfx"

int main()
{
CRYPTO_malloc_init();
OpenSSL_add_all_algorithms();

char* txt = "hello world!";
char outbuf[1024] = {0};
char what[1024] = {0};

FILE* public_file = fopen(PUBLICKEY, "r");
FILE* private_file = fopen(PRIVATEKEY, "r");

//加密
RSA* pubkey = PEM_read_RSAPublicKey(public_file, NULL, NULL, NULL);
int flen = RSA_size(pubkey);
int len = RSA_public_encrypt(flen, (unsigned char*)txt, (unsigned char*)outbuf, pubkey, RSA_NO_PADDING);
printf("Encrypt:%s\r\n", outbuf);

//解密
RSA* prikey = PEM_read_RSAPrivateKey(private_file, NULL, NULL, NULL);
flen = RSA_size(prikey);
len = RSA_private_decrypt(flen, (unsigned char*)outbuf, (unsigned char*)what, prikey, RSA_NO_PADDING);
printf("Decrypt:%s\r\n", what);

RSA_free(pubkey);
RSA_free(prikey);

return 0;
}




------------------------------------------------------------------------------------
为什么我写的程序,只要运行到读取密钥的函数时程序就直接崩溃了,象PEM_read_RSAPublicKey,PEM_read_X509,程序走到这个地方的时候都会出问题,究竟是什么原因呢?有没有谁有一个能运行的例子?

#include <openssl/rsa.h>
#include <openssl/evp.h>
#include <openssl/objects.h>
#include <openssl/x509.h>
#include <openssl/err.h>
#include <openssl/pem.h>
#include <openssl/ssl.h>
#include <openssl/applink.c>

#define PUBFILE "server.cer"
#define PRIVFILE "test.pfx"

EVP_PKEY* ReadPublicKey(const char *certfile);
EVP_PKEY* ReadPrivateKey(const char *keyfile);

int main()
{
SSLeay_add_all_algorithms();
ERR_load_crypto_strings();

ReadPublicKey(PUBFILE);

return 0;
}

EVP_PKEY* ReadPublicKey(const char *certfile)
{
FILE *fp = fopen (certfile, "r");
X509 *x509;
EVP_PKEY *pkey;

if (NULL == fp)
{
return NULL;
}

x509 = PEM_read_X509(fp, NULL, 0, NULL);
fclose (fp);
if (NULL == x509)
{
return NULL;
}

pkey = X509_extract_key(x509);
X509_free(x509);

return pkey;
}

EVP_PKEY* ReadPrivateKey(const char *keyfile)
{
FILE *fp = fopen(keyfile, "r");
EVP_PKEY *pkey;

if (NULL == fp)
{
return NULL;
}

pkey = PEM_read_PrivateKey(fp, NULL, 0, NULL);
fclose (fp);

return pkey;
}

上面这段程序我是从Openssl的demos中提取的读密钥的代码,运行到PEM_read_X509和PEM_read_PrivateKey就崩溃了。
求大哥大姐们帮忙看看究竟怎么回事儿,我都快崩溃了,明天还搞不定我就完了。。。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧