最近用OpenSSL 的RSA加解密算法,做了个非对称加密的小程序,写上来给大伙儿瞅瞅。
OpenSSL的下载,编译,配置,略过。
大概分以下几步:
首先,生成秘钥:
注意,非对称加密生成一对秘钥,公钥,私钥。公钥加密,私钥解密。私钥解密得有密码,而且我只研究了公钥加密,私钥解密这一种方法。
公钥生成:
RSA* rsa = RSA_generate_key(KeyLength, RSA_F4, NULL, NULL);
KeyLength在这里是密钥长度,256,512,1024,2048等等。
长度越长,加密后的文件越大,针对同一段文字生成的密文也越长。另外,记下这个长度,后面解密时会用到。RSA_F4是对应的算法。后面两个参数不用,略过。
BIO *bp = BIO_new(BIO_s_file());
新搞一个文件指针
BIO_write_filename(bp, cTemp);
真正的创建这个文件,调试时发现好象不支持中文路径,不知道是我的问题还是OPENSSL的问题,没有关注。
PEM_write_bio_RSAPublicKey(bp, rsa);
rsa 和 bp相关联。
BIO_free_all(bp);
释放资源。
私钥生成:
大致和公钥生成差不多,只是私钥必需要创建密码,否则生成失败。cPassTemp是私钥密码,
bp = BIO_new_file(cTemp, "wb+");
cTemp是密钥路径。
PEM_write_bio_RSAPrivateKey(bp, rsa, EVP_des_ede3(), (unsigned char*)cPassTemp, strPrivatePassword.GetLength(), NULL, NULL);
cPassTemp是密码,后面跟着密码长度。
BIO_free_all(bp);
RSA_free(rsa);
释放资源。
第二步,打开公钥(私钥):
公钥:
EVP_PKEY* key = NULL;
RSA * m_pRsaPublic = NULL;
BIO *bp = BIO_new(BIO_s_file());;
BIO_read_filename(bp, strKeyFile);
strKeyFile是路径,注意,上文说过&#