Tag: openssl

使用OpenSSL加密和解密错误0x0407106B

我在C中编写一个例程,用公钥读取base64字符串并继续加密字符串。 我也测试相同的字符串的解密,但我在尝试解码时得到错误0x0407106B: $ openssl errstr 0x0407106B error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block type is not 02 这是代码 #include #include #include #include #include #include //#define PADDING RSA_PKCS1_OAEP_PADDING #define PADDING RSA_PKCS1_PADDING //#define PADDING RSA_NO_PADDING main() { // public key char *b64_pKey = “—–BEGIN PUBLIC KEY—–\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCp2w+8HUdECo8V5yuKYrWJmUbL\ntD6nSyVifN543axXvNSFzQfWNOGVkMsCo6W4hpl5eHv1p9Hqdcf/ZYQDWCK726u6\nhsZA81AblAOOXKaUaxvFC+ZKRJf+MtUGnv0v7CrGoblm1mMC/OQI1JfSsYi68Epn\naOLepTZw+GLTnusQgwIDAQAB\n—–END PUBLIC KEY—–\n”; // private key char *b64priv_key = “—–BEGIN RSA PRIVATE KEY—–\nMIICXAIBAAKBgQCp2w+8HUdECo8V5yuKYrWJmUbLtD6nSyVifN543axXvNSFzQfW\nNOGVkMsCo6W4hpl5eHv1p9Hqdcf/ZYQDWCK726u6hsZA81AblAOOXKaUaxvFC+ZK\nRJf+MtUGnv0v7CrGoblm1mMC/OQI1JfSsYi68EpnaOLepTZw+GLTnusQgwIDAQAB\nAoGBAKDuq3PikblH/9YS11AgwjwC++7ZcltzeZJdGTSPY1El2n6Dip9ML0hUjeSM\nROIWtac/nsNcJCnvOnUjK/c3NIAaGJcfRPiH/S0Ga6ROiDfFj2UXAmk/v4wRRUzr\n5lsA0jgEt5qcq2Xr/JPQVGB4wUgL/yQK0dDhW0EdrJ707e3BAkEA1aIHbmcVfCP8\nY/uWuK0lvWxrIWfR5MlHhI8tD9lvkot2kyXiV+jB6/gktwk1QaFsy7dCXn7w03+k\nxrjEGGN+kQJBAMuKf55lDtU9K2Js3YSStTZAXP+Hz7XpoLxmbWFyGvBx806WjgAD\n624irwS+0tBxkERbRcisfb2cXmAx8earT9MCQDZuVCpjBWxd1t66qYpgQ29iAmG+\njBIY3qn9uOOC6RSTiCCx1FvFqDMxRFmGdRVFxeyZwsVE3qNksF0Zko0MPKECQCEe\noDV97DP2iCCz5je0R5hUUM2jo8DOC0GcyR+aGZgWcqjPBrwp5x08t43mHxeb4wW8\ndFZ6+trnntO4TMxkA9ECQB+yCPgO1zisJWYuD46KISoesYhwHe5C1BQElQgi9bio\nU39fFo88w1pok23a2CZBEXguSvCvexeB68OggdDXvy0=\n—–END RSA PRIVATE KEY—–\n”; // […]

如何使用RSA加密数据,SHA-256作为哈希函数,MGF1作为掩码生成函数?

我正在做一些密码学实验。 现在我有接收器的公钥,我想加密一些数据并传递给接收器。 我想使用RSAES-OAEP算法。 SHA-256作为哈希函数,MGF1作为掩码生成函数。 我想用openssl做这个。 我找到了一个带有此函数的函数RSA_public_encrypt() ,我们可以指定填充。 其中一个填充选项是 RSA_PKCS1_OAEP_PADDING EME-OAEP,如PKCS#1 v2.0中定义的SHA-1,MGF1。 他们正在使用sha-1。 我想重新配置函数使用SHA256作为散列函数和MGF1作为散列函数。 我该怎么做 ?

在OpenSSL中使用ECDSA签名消息

在以编程方式在OpenSSL中使用ECDSA时,如何设置用于签名消息的私钥? 我有以下代码: static int create_signature(unsigned char* hash) { EC_KEY *eckey=NULL; EC_GROUP *ecgroup=NULL; EVP_PKEY *evpkey=NULL; unsigned char *signature=NULL; point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED; int signature_size, block_size; unsigned char * block=NULL; ecgroup = get_ec_group_192(); EC_GROUP_set_asn1_flag(ecgroup, OPENSSL_EC_NAMED_CURVE); EC_GROUP_set_point_conversion_form(ecgroup, form); eckey=EC_KEY_new(); EC_KEY_set_group(eckey,ecgroup); EC_KEY_generate_key(eckey); evpkey=EVP_PKEY_new(); EVP_PKEY_assign_EC_KEY(evpkey,eckey); signature=OPENSSL_malloc(EVP_PKEY_size(evpkey)); ECDSA_sign(0, hash, sizeof(hash), signature, &signature_size, eckey); printf(“%s”, signature); return 0; } 函数get_ec_group_192()是通过运行openssl ecparam -C […]

AES EVP_Decrypt的“长度”参数是什么?

这与OpenSSL上的EVP_DecryptFinal_ex错误相关联 我试图找出为什么AES解密不起作用,最后我找到了问题所在,现在正在找人帮我解决它:) 这是我测试过的代码(来自各个post): #include #include #include #include int AES_BLOCK_SIZE = 128; int main(int argc, char **argv) { EVP_CIPHER_CTX en; EVP_CIPHER_CTX de; EVP_CIPHER_CTX_init(&en); EVP_CIPHER_CTX_init(&de); const EVP_CIPHER *cipher_type; unsigned char *passkey, *passiv, *plaintxt; char *plain; char *plaintext; unsigned char *ciphertext; int olen, len; int i =0; unsigned char iv[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, […]

将OpenSSL BIO从阻塞模式更改为非阻塞模式

我有一个multithreading应用程序,它在C中大量使用OpenSSL。它的设计理念是它的所有SSL连接都会被阻塞。 具体来说,阻止BIO。 它们都被分配到一个传入端口,如下所示: ssl = SSL_new(ctx); SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY); sock = BIO_new_socket(socket, BIO_CLOSE); SSL_set_bio(ssl, sock, sock); 事实certificate,代码库中有一些小部分使用非阻塞BIO是最佳选择。 受益于非阻塞BIO的小部件无法知道哪些SSL连接属于它们。 因此,他们总是会收到封锁的BIO。 问题是,阻止BIO可以改为非阻塞吗? 我知道BIO_set_nbio可用于使BIO无阻塞,但文档说: 在建立连接之前应该对BIO_set_nbio()进行调用,因为在连接过程中设置了非阻塞I / O. 我想到的另一个可能的选择是复制BIO并重新创建它,同时以某种方式保持所有状态。

如何使用OpenSSL C库将RSA密钥从二进制数据加载到RSA结构?

目前我的私钥保存在一个文件private.key中,我使用以下函数加载它: RSA * r = PEM_read_RSAPrivateKey(“private.key”,NULL,NULL,NULL); 这很好用,但我对基于文件的格式不满意; 我想在char*变量中以纯二进制forms(即,没有base64或类似)保存我的密钥,并从/向它加载/保存密钥。 这样我就有了更多的自由:我将能够将密钥直接存储到应用程序const char key[] { 0x01, 0x02, … }; ,通过网络套接字等发送 不幸的是,虽然我还没有办法做到这一点。 保存和加载我知道的密钥的唯一方法是将其直接读取/保存到文件中。

使用ssl c / c ++进行客户端和服务器通信 – SSL协议不起作用

我正在尝试使用以下软件中的SSL客户端/服务器示例: http : //simplestcodings.blogspot.com.br/2010/08/secure-server-client-using-openssl-in-c.html以使用以下方法创建安全连接SSLv3的。 我在服务器端请求证书进行了一些更改,通信工作正常并且双方都理解。 因此,我的问题是当客户端连接到服务器时,协议通信SSLv3无法正常工作,我使用wirkeshark进行validation,并且在协议字段中只显示TCP或IPA(RSL格式错误的数据包)有人可以帮助我吗? 谢谢! 我按照教程https://help.ubuntu.com/community/OpenSSL创建了我的证书。 这是我的客户端代码: //SSL-Client.c #include #include #include #include #include #include #include #include #include #include #define FAIL -1 //Added the LoadCertificates how in the server-side makes. void LoadCertificates(SSL_CTX* ctx, char* CertFile, char* KeyFile) { /* set the local certificate from CertFile */ if ( SSL_CTX_use_certificate_file(ctx, CertFile, SSL_FILETYPE_PEM) <= 0 ) […]

对OpenSSL非阻塞I / O感到困惑

通常,OpenSSL库(C API)似乎提供了两种方法来执行所有操作:您可以使用根据自己的喜好配置的普通系统套接字,也可以使用类似于流的OpenSSL BIO对象。 但是,我经常对一些重复的function感到困惑。 例如,如何使SSL连接无阻塞? 一种方法似乎是简单地访问底层文件描述符并使用fcntl将其设置为非阻塞。 但是还有一个名为BIO_set_nbio的OpenSSL API BIO_set_nbio ,它接收一个BIO*对象并将其设置为非阻塞模式。 那么设置非阻塞SSL套接字的最佳方法是什么? 如果您将OpenSSL传递给已通过fnctl设置为非阻塞模式的本机文件描述符会发生什么? 你还需要专门调用BIO_set_nbio来使BIO对象无阻塞吗?

使用OpenMP和OpenSSL时内存泄漏和seg故障

我有一个庞大的代码(我的学校项目),我使用Openssl 。 一切都工作完美,工具我决定我会multithreading。 我选择openmp作为我的线程环境,因为它非常简单易学(至少我需要的基础很简单)。 我的整个代码看起来像这样: struct mystr[10]; omp_set_num_threads(10); #pragma omp parallel { mystr[omp_get_thread_num()] = call_fun_which_uses_openssl(); } CRYPTO_cleanup_all_ex_data(); 我的call_fun_which_uses_openssl函数使用低级openssls api函数( MD4((unsigned char*)&string, strlen(string), (unsigned char*)&digest);而不是MD4_CTX ctx等)。 我的函数使用RSA,DSA,…并且无法访问任何全局变量,它使用的每个变量都在call_fun_which_uses_openssl声明,所以像我这样做multithreading应该保证这些变量保持私有。 虽然,我有时会在此代码中出现seg错误。 我读到CRYPTO_cleanup_all_ex_data不是线程安全的(但我需要它因为内存泄漏)但是我在并行区域外使用它,对吧? 当我删除openmp调用时,每次都有效,所以multithreading和openssl一定存在问题。 任何想法如何解决? 在我看来它应该工作,因为call_fun_which_uses_openssl的线程调用为每个线程创建自己的私有变量,应该没有问题…请,帮助:)

OpenSSL中的Premaster密钥和主密钥

我有以下价值观: 客户端随机字节 服务器随机字节 前主秘密 我不想使用像SSL,SSL_CTX等function。我想要的是,只要我有三个数字,我想从它们计算主数字。 如何使用OpenSSL计算c中的主密钥? 在RFC中指定的PRF的OpenSSL C库中是否有任何function? 谢谢。