Tag: openssl

OpenSSL函数EVP_PKEY_keygen中的内存泄漏

我只是尝试使用以下方法生成RSA密钥: #include #include int main(void) { OpenSSL_add_all_algorithms(); EVP_PKEY_CTX *ctx; EVP_PKEY *pkey = NULL; ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); if (!ctx) { // error } if (EVP_PKEY_keygen_init(ctx) <= 0) { // error } if (EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, 2048) <= 0) { // error } if (EVP_PKEY_keygen(ctx, &pkey) <= 0) { // this call seems to leak // error } […]

AES ECB加密/解密仅解密前16个字节

我有解码AES 256字符串的function,但它只返回16个字符 bool decrypt_block(unsigned char* cipherText, unsigned char* plainText, unsigned char* key) { AES_KEY decKey; if (AES_set_decrypt_key(key, 256, &decKey) < 0) return false; AES_decrypt(cipherText, plainText, &decKey); return true; } decrypt_block( encoded, resultText, ( unsigned char *) “57f4dad48e7a4f7cd171c654226feb5a”); 任何的想法

如何在不使用LD_LIBRARY_PATH的情况下在makefile中链接特定版本的共享库?

我知道LD_LIBRARY_PATH是邪恶的,避免使用它是一个好习惯。 我在远程Solaris 9服务器上有一个名为server.c的程序,它包含两个版本的openssl库(0.9.8和1.0.0),我使用的是gcc 3.4.6。 我的程序需要链接到1.0.0a版本。 因为它是工作环境,所以我无权修改openssl库目录中的任何内容。 我想在不设置LD_LIBRARY_PATH情况下用-L和-R选项编译我的程序,它运行正常。 (我注意到没有设置-R选项它将无法工作)但编译后的程序保持链接到/usr/local/ssl/lib/libssl.so.0.9.8而不是/…/libssl.so.1.0.0 。 有解决办法吗? 顺便说一句,如果我错了,请纠正我:是-R选项在运行时实际“链接”共享库而-L选项只在编译时“加载”共享库吗? 任何帮助都感激不尽! Z.Zen ////////////////////////////////////////////// 这是我的Makefile : CC = gcc OPENSSLDIR = /usr/local/ssl CFLAGS = -g -Wall -W -I${OPENSSLDIR}/include -O2 -D_REENTRANT -D__EXTENSIONS__ RPATH = -R${OPENSSLDIR}/lib LD = ${RPATH} -L${OPENSSLDIR}/lib -lssl -lcrypto -lsocket -lnsl -lpthread OBJS = common.o PROGS = server all: ${PROGS} server: server.o ${OBJS} ${CC} […]

使用OpenSSL计算并打印文件的SHA256哈希值

我正在尝试使用OpenSSL / libcrypto编写一个C函数来计算文件的SHA256总和。 我的代码基于Adam Lamer的c ++示例。 这是我的代码: int main (int argc, char** argv) { char calc_hash[65]; calc_sha256(“file.txt”, calc_hash); } int calc_sha256 (char* path, char output[65]) { FILE* file = fopen(path, “rb”); if(!file) return -1; char hash[SHA256_DIGEST_LENGTH]; SHA256_CTX sha256; SHA256_Init(&sha256); const int bufSize = 32768; char* buffer = malloc(bufSize); int bytesRead = 0; if(!buffer) return -1; […]

从.p12文件中提取客户端证书和私钥

任何人都可以告诉我如何使用 PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, STACK_OF(X509) **ca); 任何文件参考也将起作用。

AES加密 – 使用OpenSSL生成密钥

作为参考和作为post的延续: 如何使用OpenSSL解密Java AES加密数据? 我有以下问题。 我正在使用OpenSSL库和C编程来加密aes-cbc-128中的数据。 我得到任何输入二进制数据,我必须加密它。 我了解到Java有一个CipherParameters接口来设置IV和KeyParameters。 有没有办法使用openSSL生成IV和密钥? 简而言之,如何在C程序中使用openSSL的随机生成器来实现这些目的。 你们中的任何人都可以提供一些文档/示例/链接吗? 谢谢

使用OpenSSL从内存而不是文件中读取证书文件

我有一台服务器可以使用OpenSSL监听HTTPS。 为此,我必须提供使用证书。 但是,当前实现使用文件名提供给OpenSSL API。 我希望从内存中读取证书信息,这样我就不必发送证书文件了。 我试图谷歌,但我没有提出任何选择。 有可能吗? 如果是这样,我如何使用OpenSSL从内存而不是文件中读取证书文件? 编辑 :以下内容从评论转移到问题。 // CURRENT void start_server() { const char *fileName = “cert_and_key.pem”; set_server_ssl_file(fileName); } set_server_ssl_file(const char *fileName) { //initialize context SSL_CTX_use_certificate_file(CTX, pem, SSL_FILETYPE_PEM); SSL_CTX_use_PrivateKey_file(CTX, pem, SSL_FILETYPE_PEM); } //REQUIRED void start_server() { const char *cert = “–BEGIN CERTIFICATE–…………”; const char *key = “–BEGIN RSA PRIVATE KEY–…….”; set_server_ssl_options(cert, key); […]

协助openssl blowfish简单示例插入垃圾字符

如果您有一个很好的例子,只需使用openssl加密文件,这比我遇到问题的文件更好,我将非常感激。 更新:作者Myabe是正确的。 在我没有分配的东西上使用memset让我想起strtok对非堆栈变量的窒息。 Update2:使用malloc使核心转储停止。 更新了代码。 控件Hs仍在出现。 更新代码以反映这一点。 Update3:示例中的循环结构显示不正确。 我不确定后续读取的发生方式是否大于初始读取的大小。 Update4:我想我找到了。 decrypt loop有一个olen + = tlen,缓冲区应丢弃该组位。 :( 不是。 Update99988:我已经放弃了所有的希望。 我想我需要抛弃这个例子,而是从Openssl书中开始。 在解密时,中间层缓冲区预先添加了^ H,但由于指针被传入,我开始怀疑对齐问题。 我想我可能在一个糟糕的例子开始的船上比从头开始更糟糕。 我不得不做一些更正(原件在下面的代码中注释)。 原作者在传递地址方面存在一些问题。 作者使用的1024和1032不同大小的缓冲区正在激发我的思想,但我认为它与8位种子和链式加密调用有关。 我在(控制Hs)中获取垃圾字符,并且像解密这样的核心转储正在破坏堆栈。 我对加密,openssl相当新,而且我并不熟悉gdb。 我已尽一切努力简化这一过程 gcc –version报告4.3.2 打开SUSE 11 compile.sh gcc -g -o blowfish blowfish.c -lcrypto run.sh ulimit -c unlimited ./blowfish example.txt encrypted_example decrypted_example echo diff example.txt decrypted_example diff example.txt decrypted_example clean.sh […]

生成随机n字节Base64字符串后的不可打印字符

我试图使用openssl生成一个32byte base64字符串,但它并不总是产生32字节字符串,有时输出是乱码并且没有正确显示 #include #include #include #include #include #include #include int Base64Encode(const unsigned char* buffer, unsigned char** b64text) { //Encodes a binary safe base 64 string BIO *bio, *b64; BUF_MEM *bufferPtr; b64 = BIO_new(BIO_f_base64()); bio = BIO_new(BIO_s_mem()); bio = BIO_push(b64, bio); BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL); //Ignore newlines – write everything in one line BIO_write(bio, buffer, strlen(buffer)); BIO_flush(bio); BIO_get_mem_ptr(bio, […]

RSA加密/解密

我正在编写一个C程序,用于加密(基于私钥)和解密(基于公钥)文本。 我正在尝试使用OpenSSL lib。 有谁知道任何好的教程,快速入门指南或示例代码? 我没有在网上找到任何像样的人。