Tag: openssl

具有AES-NI支持的EVP接口

在C / C ++中使用OpenSSL加密库时,EVP接口是否自动支持AES-NI硬件加速(假设处理器支持)? 参考这个 ,看起来命令行OpenSSL确实有支持。 我想知道是否有特定的函数调用,我必须使用它来利用这种支持。 例如,如果我使用EVP_EncryptInit_ex(ctx, type, imp, key, iv) ,那么这些参数中的任何一个都必须指定NI加速度吗? 即EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv)诀窍? 谢谢!

为什么OPENSSL_cleanse看起来如此复杂且线程不安全?

这是OpenSSL 1.0.1i中OPENSSL_cleanse的实现 unsigned char cleanse_ctr = 0; void OPENSSL_cleanse(void *ptr, size_t len) { unsigned char *p = ptr; size_t loop = len, ctr = cleanse_ctr; while(loop–) { *(p++) = (unsigned char)ctr; ctr += (17 + ((size_t)p & 0xF)); } p=memchr(ptr, (unsigned char)ctr, len); if(p) ctr += (63 + (size_t)p); cleanse_ctr = (unsigned char)ctr; } 它看起来很复杂且线程不安全(通过读写全局变量cleanse_ctr […]

使用OpenSSL从内存中读取公钥/私钥

我在我的项目中使用公钥/私钥来加密/解密一些数据。 我在服务器上托管公钥(“public.pem”)。 “public.pem”看起来像这样: —–BEGIN PUBLIC KEY—– ….. ….. —–END PUBLIC KEY—– 我编写了一个客户端,下载此公钥并将其保存到磁盘,然后使用文件描述符将OpenSSL的PEM_read_RSA_PUBKEY()调用到该文件。 此操作很有效,结果是一个准备加密的RSA对象。 我想避免每次都将公钥写入磁盘(因为我已经在内存中有缓冲区)。 如何在不将缓冲区保存到磁盘的情况下执行相同的操作? 我注意到一个名为PEM_read_bio_RSAPublicKey()的函数,但我不确定它是否使用了BIO结构。 我在正确的道路上吗? 所以真正的问题是:如何直接从内存而不是文件描述符中读取RSA对象的公钥/私钥。

使用C语言的openssl库进行简单的AES加密解密

我想加密一个包含少量String的结构,然后解密它。 我尝试了以下代码。 原始代码可以从网上找到,它运行得很好。 我将它的输入更改为结构。 以下是代码。 #include #include #include #include #include #include typedef struct ticket { /* test field */ int ticketId; char username[20]; char date[20]; } USR_TICKET; // a simple hex-print routine. could be modified to print 16 bytes-per-line static void hex_print(const void* pv, size_t len) { const unsigned char * p = (const unsigned […]

了解OpenSSL中的引擎初始化

我正在尝试设置HMAC-SHA-256哈希的基本测试,但我遇到引擎设置问题。 理想情况下,我只想设置HMAC-SHA算法,但到目前为止,我还没有得到加载所有算法的一般情况。 目前我正在尝试设置默认摘要的行上获得段错误。 此外,我经常是一个Java人,所以不要犹豫,指出代码中的任何错误。 #include #include #include #include #include int main() { unsigned char* key = (unsigned char*) “0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b”; unsigned char* data = (unsigned char*) “4869205468657265”; unsigned char* expected = (unsigned char*) “b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7”; unsigned char* result; HMAC_CTX* ctx; ENGINE* e; ENGINE_load_builtin_engines(); ENGINE_register_all_complete(); ENGINE_set_default_digests(e); HMAC_CTX_init(ctx); HMAC_Init_ex(ctx, key, 40, EVP_sha256(), e); result = HMAC(NULL, NULL, 40, data, […]

如何使用基于OpenSSL的客户端提取预主密钥?

我有一个使用OpenSSL 1.0.2的应用程序,我想用Wireshark检查流量。 Wireshark可以(据称)解密TLS对话,前提是您提供了预主密钥。 如果我使用像TLS_RSA_WITH_AES_256_CBC_SHA256这样的密码套件; 任何人都可以告诉我如何从SSL或SSL_CTX结构中获取pre-master秘密? 我可以在SSL对象中破解不透明的结构 – 这不适用于产品中的任何产品; 我只是想知道如何为Wireshark填充一个pre-master密文件。

链接OpenSSL时对t1sl_steup_key_block的未定义引用

我遇到了将OpenSSL库链接到现有项目的问题。 我在哪里弄错了? 以下是我遵循的步骤。 我已下载SSL库,已配置并安装它。 它安装在/usr/local/ssl 。 2)我已经将/usr/local/ssl/lib libcrypto.a和libssl.a复制到我的项目中,比如/mnt/linux/bla/bla/lib 。 3)然后我编辑make文件并在那里添加了libssl libcrpto的路径。 添加的路径是项目中的一个,如/mnt/linux/bla /bla 3)制作 4)通过光滑编辑构建项目 当它构建时,我得到一个很长的错误链,就像 ../lib/libssl.a(t1_enc.o) :In function ‘t1sl_steup_key_block: undefined ref 现在,我想将.a文件复制到项目中可能会有问题。 有没有替代方案,或者我应该使用ln -s将.a文件/usr/local/openssl/lib到我的项目库文件夹中? 以下是错误。 Debug/FC5/m2pa.o -ldl -lpthread -ltdapi ../septel/gctlib.lib ../lib/libpq.a ../asn1/lib/libasn1per.a ../mysql/lib/libmysqlclient.a -L../lib ../asn1/lib/libasn1rt.a -lm -lcrypt -lcrypto -lssl -rdynamic ../lib/libssl.a(ssl_lib.o): In function `SSL_set_quiet_shutdown’:ssl_lib.c:(.text+0x670): multiple definition of `SSL_set_quiet_shutdown’ ../mysql/lib/libmysqlclient.a(ssl.o):ssl.cpp:(.text+0x125c): first defined here /usr/bin/ld: Warning: […]

使用C例程和openssl dgst,rsautl命令时的不同签名

我使用以下语句来创建RSA公钥和私钥。 openssl genrsa -out ksign_private.pem 1024 openssl rsa -in ksign_private.pem -pubout> ksign_public.pem 然后我有程序使用openssl libcrypto中的PEM_read_RSAPrivateKey,EVP_PKEY_assign_RSA,EVP_SignInit,EVP_SignUpdate,EVP_SignFinal函数来生成签名文件。 我还有例程validation可以使用PEM_read_RSA_PUBKEY,EVP_PKEY_assign_RSA,EVP_VerifyInit,EVP_VerifyUpdate,EVP_VerifyFinalvalidation签名。 这些例程的源代码如下所示。 使用这些function时,我可以创建SHA1签名,使用私钥加密,并使用公钥解密。 但是我试图使用相同的数据文件,使用openssl rsautl使用相同的私有公钥,而openssl rsautl创建的签名则大不相同。 openssl dgst -sha1 -binary testfile.sha1 openssl rsautl -sign -in testfile.sha1 -inkey ksign_private.pem -keyform PEM -out testfile.sig 在使用openssl rsautl或dgst命令时,任何人都可以告诉我使用错误的选项吗? #include #include #include #include #include #include #include #include #include #include #include #include #include #include int ksignEvpSign(FILE * […]

使用openssl加密和解密小文件

我想用C / C ++编写一个小程序,它读取一个小文本文件,并使用“内部”键对其进行加密。 然后我还想写另一个小程序,它可以使用内部相同的密钥解密加密文件。 我看了openSSL网站并用谷歌搜索但发现不是简单的例子,有人试过这样做吗?

使用SNI在一个盒子中提供多个域

我在FreeBSD-8.2中使用OpenSSL 0.9.8q。 我的系统上有3个虚拟主机,并希望在一台服务器上实现SNI以服务所有3个虚拟主机。 我有3个单独的证书,每个证书,在我的ssl-server代码中,我必须以某种方式找出客户端请求的域名是什么,并使用相应的证书文件。 为此,我编写了一个名为get_ssl_servername_cb的函数,并将其作为回调函数传递给SSL_CTX_set_tlsext_servername_callback 。 这样,在回调函数中,我可以得到客户端请求的域名。 但我的问题是,这个回调函数是在执行SSL_accept函数后执行的,但我必须在使用SSL_new命令之前选择并使用相应的证书,这是执行SSL_accept之前的SSL_accept 。 所以我的问题是,如何为SNI使用SSL_CTX_set_tlsext_servername_callback函数?