首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么使用Openssl,已经有Key文件,怎么使用这个文件进行加密和解密

2012-02-25 
如何使用Openssl,已经有Key文件,如何使用这个文件进行加密和解密?现在和第三方公司合作给客户开发一个东西

如何使用Openssl,已经有Key文件,如何使用这个文件进行加密和解密?
现在和第三方公司合作给客户开发一个东西,我这边需要将一个字符串加密以后传递给第三方公司提供的jsp页面。加密方式是第三方提供一个Key文件,就像银行网银用的文件证书一样,使用RSA方式加密的。现在第三方公司给我了两个文件:server.cer和test.pfx。
  他们给的ReadME文件内容如下:
pfx证书密码:123456
pfx里包含一对公钥和私钥,可以用于解密和加密两个功能。
cer里只包含公钥,只能用于加密。
给到pfx的目的是方便你们自行测试解密后的数据是否正确,如果用cer加密的密文,用pfx可以正确解密的话,代码就没有问题了,之后我在给你具体的URL地址和正式的只包含公钥的cer key即可。

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

[解决办法]
飘 人气
[解决办法]
http://www.openssl.org/
[解决办法]
openssl的库最好是使用Linux运行,我做过解析证书的,有段时间了,好像是p12格式的,利用的是X509的结构解析的,公钥和私钥一个方法就搞定~~openssl可以搞定的,我有openssl的资料~~300页的文档~~~不过在公司,需要的话,周一给你吧~~站内PM啊~~~pfx没了解过~最好的做法就是Linux下的C++开发,代码在win下打包整dll或是so,使用java的JNI来调用~~~最好是C++编程,不要使用C~~C和JNI的衔接貌似不是很好~~
openssl版本问题要建议,不要使用最新的版本~~openssl-0.9.8k.tar.gz还不错的~~

有一段demo,解压后openssl-0.9.8k\openssl-0.9.8k\demos,很多例子的,你先看看~~推荐Linux啊~ 地址:http://openssl.org/source/ 自己编译下~~不想编译直接下载人家编译好的也行~就是lib win32(so Linux)和include文件~

C/C++ code
 int main(int argc, char **argv){    FILE *fp;    EVP_PKEY *pkey;    X509 *cert;    STACK_OF(X509) *ca = NULL;    PKCS12 *p12;    int i;    if (argc != 4) {        fprintf(stderr, "Usage: pkread p12file password opfile\n");        exit (1);    }    SSLeay_add_all_algorithms();    ERR_load_crypto_strings();    if (!(fp = fopen(argv[1], "rb"))) {        fprintf(stderr, "Error opening file %s\n", argv[1]);        exit(1);    }    p12 = d2i_PKCS12_fp(fp, NULL);    fclose (fp);    if (!p12) {        fprintf(stderr, "Error reading PKCS#12 file\n");        ERR_print_errors_fp(stderr);        exit (1);    }    if (!PKCS12_parse(p12, argv[2], &pkey, &cert, &ca)) {        fprintf(stderr, "Error parsing PKCS#12 file\n");        ERR_print_errors_fp(stderr);        exit (1);    }    PKCS12_free(p12);    if (!(fp = fopen(argv[3], "w"))) {        fprintf(stderr, "Error opening file %s\n", argv[1]);        exit(1);    }    if (pkey) {        fprintf(fp, "***Private Key***\n");        PEM_write_PrivateKey(fp, pkey, NULL, NULL, 0, NULL, NULL);    }    if (cert) {        fprintf(fp, "***User Certificate***\n");        PEM_write_X509_AUX(fp, cert);    }    if (ca && sk_num(ca)) {        fprintf(fp, "***Other Certificates***\n");        for (i = 0; i < sk_X509_num(ca); i++)             PEM_write_X509_AUX(fp, sk_X509_value(ca, i));    }    fclose(fp);    return 0;} 

热点排行