Tag: openssl

如何使用RSA加密/解密长输入消息?

我写了一个简单的测试程序来加密/解密消息。 我有一个keylength : int keylength = 1024; // it can also be 2048, 4096 和最大输入长度: int maxlen = (keylength/8)-11; 我知道我的输入大小应该<而不是maxlen,如下所示: if(insize >= maxlen) printf(“cannot encrypt/decrypt!\n”); 我的问题很简单 – 是否有可能(如果是这样,我该怎么做)使用比maxlen RSA消息加密/解密? 主要代码也非常简单但仅在insize <maxlen时有效: if((encBytes=RSA_public_encrypt(strlen(buff1)+1, buff1, buff2, keypair, RSA_PKCS1_PADDING)) == -1) { printf(“error\n”); } if((decBytes=RSA_private_decrypt(encBytes, buff2, buff3, keypair, RSA_PKCS1_PADDING)) == -1) { printf(“error\n”); }

为什么openssl / ssl.h只包含相对路径?

我通过执行以下操作使用MSVC ++ 2013 Express编译器构建了OpenSSL: 从这里安装ActivePerl 5.16.3。 抓取openssl-1.0.1e.tar.gz并将其解压缩到C:\OpenSSL\Win64 。 打开“VS2013 x64交叉工具命令提示符”并cd -ing到我解压缩归档的目录。 运行以下命令: perl配置VC-WIN64A MS \ do_win64a nmake -f ms \ ntdll.mak 这完成没有错误(构建适当的DLL)。 然而,发生了一些非常奇怪的事情。 如果我打开openssl/ssl.h ,文件的内容是: ../../ssl/ssl.h 由于这显然不是有效的C / C ++,我无法编译任何依赖于OpenSSL头的应用程序,因为上面的问题。 我做错了什么?

RSA_private_decrypt失败

我用openssl。 首先我创建了私钥/公钥,然后我加密了一个字符串并将结果保存在一个文件中。 当我尝试解密文件时,我的程序失败了。 更重要的是,每次加密文件都不同(我使用md5sum检查)。 我错过了什么? /* gcc -lssl queation.c -o test_ssl #openssl genrsa -out test_private.key 1024 #openssl rsa -in test_private.key -pubout -out test_public.key */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define OPENSSLKEY “test_private.key” #define PUBLICKEY “test_public.key” #define BUFFSIZE […]

pod2man失败,预期的文字不是数字

我正在构建一个旧版本的openSSL来进行一些测试,但是构建失败了。 我已经修复了一些东西,但是现在有一个新的东西,日志报告它在安装手册页时失败了。 created directory `/Users/AuserName/Documents/proj/folderName/folderNameA/OpenSSL/tt/OpenSSL-for-iPhone/bin/iPhoneSimulator10.3-i386.sdk/man’ created directory `/Users/AuserName/Documents/proj/folderName/folderNameA/OpenSSL/tt/OpenSSL-for-iPhone/bin/iPhoneSimulator10.3-i386.sdk/man/man1′ created directory `/Users/AuserName/Documents/proj/folderName/folderNameA/OpenSSL/tt/OpenSSL-for-iPhone/bin/iPhoneSimulator10.3-i386.sdk/man/man3′ created directory `/Users/AuserName/Documents/proj/folderName/folderNameA/OpenSSL/tt/OpenSSL-for-iPhone/bin/iPhoneSimulator10.3-i386.sdk/man/man5′ created directory `/Users/AuserName/Documents/proj/folderName/folderNameA/OpenSSL/tt/OpenSSL-for-iPhone/bin/iPhoneSimulator10.3-i386.sdk/man/man7′ installing man1/CA.pl.1 installing man1/asn1parse.1 installing man1/ca.1 installing man1/ciphers.1 installing man1/cms.1 cms.pod around line 457: Expected text after =item, not a number cms.pod around line 461: Expected text after =item, not a number cms.pod around line 465: Expected text […]

C中的OpenSSL“Seal”(或通过shell)

我正在努力将一些PHP代码移植到C,它与Web API联系。 我遇到的问题是PHP代码使用函数openssl_seal() ,但我似乎无法找到任何方法在C中执行相同的操作,甚至在调用system()通过openssl 。 从openssl_seal()上的PHP手册: int openssl_seal(string $ data,string&$ sealed_data,array&$ env_keys,array $ pub_key_ids) openssl_seal()使用带有随机生成的密钥的RC4密封(加密)数据。 密钥使用与pub_key_ids中的标识符相关联的每个公钥加密,并且每个加密密钥在env_keys中返回。 这意味着可以向多个收件人发送密封数据(前提是已获得其公钥)。 每个收件人必须同时接收密封数据和使用收件人公钥加密的信封密钥。 实现这个的最佳方法是什么? 出于显而易见的原因,我真的不想每次都调用PHP脚本。

在OpenSSL中validationRSA公钥?

我有一个EVP_PKEY只有RSA密钥的公共部分。 我从DER编码中的SubjectPublicKeyInfo结构中提取公共部分。 这就是我现在拥有的: unsigned char publicKey[] = {0x30, 0x5a, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, …} size_t publicKeyLength = 92; unsigned char* publicKeyCopy = new unsigned char[publicKeyLength]; memcpy(publicKeyCopy, publicKey, publicKeyLength); RSA *rsa; rsa = d2i_RSA_PUBKEY(NULL, (unsigned char const **) &pubKey, pubKeyLen); EVP_PKEY *pkey = EVP_PKEY_new(); EVP_PKEY_assign_RSA(pkey, rsa); 我知道您可以使用RSA_check_key来validationRSA私钥,但文档说“ 它不适用于仅填充了模数和公共指数元素的RSA公钥 ”。 那么,是否可以在没有私有部分的情况下validation密钥? 因为你可以看到我只有 EVP_PKEY的公共部分。 我想知道,这甚至可能吗? […]

validationOpenSSL 0.9.8a中的RSA签名

我正在开发基于OpenSSL 0.9.8a API的应用程序,我需要使用RSA公钥pubkeyvalidationRSA签名(4096位RSA密钥)。 这是我的代码: const EVP_MD* md = EVP_get_digestbyname(“SHA512”); if (!md) { return false; } if(EVP_DigestInit_ex(ctx, md, NULL)<=0) { return false; } if(EVP_DigestVerifyInit( ctx, NULL, md, NULL, pubKey)<=0) { return false; } if (EVP_DigestUpdate(ctx, Msg, MsgLen) <= 0) { return false; } int res = EVP_DigestFinal_ex(ctx, MsgHash, &MsgHashLen); 问题是EVP_DigestVerifyInit函数未在openssl0.9.8a中定义。 是否有其他方法可以在早于OpenSSL 1.0.0版本的版本中validationRSA签名? 以下是我的输入:/ * Text_message保存到“sample.txt”文件(文本以最后一个字符’\ n’结尾)* […]

如何将PFS添加到用c和openssl编写的套接字服务器中

我尝试将PFS(完美前向保密)添加到我的客户端 – 服务器应用程序中。 当我使用以下命令运行服务器时: openssl s_server -key ./key.pem -cert ./cert.pem -accept 443 -cipher ECDHE-RSA-AES128-SHA -tls1_2 鉴于以下ctx,我能够与我的客户连接: SSL_CTX* initCTX() { SSL_METHOD *method; SSL_CTX *ctx; SSL_library_init(); OpenSSL_add_all_algorithms(); SSL_load_error_strings(); method = TLSv1_2_client_method(); ctx = SSL_CTX_new(method); if(ctx == NULL) { ERR_print_errors_fp(stderr); return NULL; } SSL_CTX_set_cipher_list(ctx, “ECDHE-RSA-AES128-SHA”); return ctx; } 当我使用以下ctx运行我的服务器应用程序时: SSL_CTX* init_ssl_ctx() { SSL_METHOD const *method; SSL_CTX *ctx; SSL_library_init(); […]

生成EC Diffie-Hellman公钥和私钥对

我需要生成一个EC Diffie Hellman密钥对。 我使用的是secp256r1命名曲线和OpenSSL。 这就是我到目前为止所拥有的: unsigned char *ecdh(size_t *secret_len) { EVP_PKEY_CTX *pctx, *kctx; EVP_PKEY_CTX *ctx; unsigned char *secret; EVP_PKEY *pkey = NULL, *peerkey, *params = NULL; /* NB: assumes pkey, peerkey have been already set up */ /* Create the context for parameter generation */ if(NULL == (pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL))) printf(“Error in EC key […]

使用openssl库获取x509证书哈希

我目前正在开发一个应用程序,它使用openssl库(libcrypto)生成证书。 现在我必须得到已经存在的证书的哈希值。 当我使用我的终端时,我可以通过使用生成哈希值 openssl x509 -hash -in cert.pem -noout 输出:01da0e2b 这是我的代码,我尝试使用C中的库生成哈希值。 X509 *cert = NULL; FILE *fp = fopen(currentCert.UTF8String, “r”); PEM_read_X509(fp, &cert, NULL, NULL); long hash = X509_subject_name_hash(cert); char *mdString = malloc(sizeof(long)); sprintf(mdString, “%lx”,hash); printf(mdString); 产量:1817886a 但实际上我的输出是不同的。 有谁知道我做错了什么?