Tag: openssl

OpenSSL SHA1没有validationNIST SHAKE测试向量?

我编写了一个C代码,它调用OpenSSL SHA1来生成摘要,但我生成的摘要不匹配。 #define MSG_SIZE 190 #include #include #include void str2hex(char *str, unsigned char *hex, int len) { int tt, ss; char temp[5]; for (tt = 0, ss = 0; tt < len, ss < 2 * len; tt++, ss += 2) { temp[0] = '0'; temp[1] = 'x'; temp[2] = str[ss]; temp[3] = str[ss + […]

来自openssl的CMS加密/解密损坏

所以我导航到openssl的demos文件夹中 /usr/share/doc/libssl-doc/demos/cms 我在那里编译了测试文件 gcc cms_enc.c -o enc -lssl -lcrypto gcc cms_dec.c -o dec -lssl -lcrypto 然后我首先开始他们两个./enc然后./dec。 不幸的是发生了以下错误 140502142240416:error:0200B009:system library:fread:Bad file descriptor:bss_file.c:245: 140502142240416:error:20082002:BIO routines:FILE_READ:system lib:bss_file.c:246: 140502142240416:error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length:evp_enc.c:532: 那么这意味着openSSL中的CMS实现已经被打破了? 我想将这个function用于我自己的c ++程序,但它失败了所以我想试试即使这些例子都有效。

使用OpenSSL编译C程序

我是Openssl的新手。 我在ubuntu 16.04上安装了openssl 1.1.0e和libssl-dev。 我试图在openssl文档https://www.openssl.org/docs/man1.1.0/crypto/EVP_DigestInit.html中运行此页面上的示例。 我用这个命令 gcc example1.c -lssl -lcrypto 编译程序。 但我得到以下错误未定义参考错误 我在论坛上看到了相关问题,但找不到解决方案。 如果有人可以帮助指出解决方案,那将是一个很大的帮助。

MS CryptoAPI – 机器密钥库,错误0x80090016(NTE_BAD_KEYSET),带有certreq创建的密钥

摘要 我使用certreq创建了一个PKCS#10 CSR,并设置了Exportable=TRUE选项。 这在REQUEST位置下成功创建了一个密钥。 我还有一个有效的证书,钥匙在MY 。 如果我尝试访问其中任何一个,CryptoAPI报告错误代码0x80090016 。 到目前为止,在不同的访问权限下运行无法解决此问题。 目标 我的目标是获得MY和REQUEST两个键。 如果我在其中任何一个上调用CryptAcquireContextA() ,它就会失败。 系统 Windows 7 x64 示例源代码 我的完整代码如下所示: hStore = CertOpenStore(CERT_STORE_PROV_SYSTEM_A, 0, 0, CERT_SYSTEM_STORE_LOCAL_MACHINE, “REQUEST”); pCert = CertFindCertificateInStore(hStore, X509_ASN_ENCODING, 0, CERT_FIND_SUBJECT_STR_A, “CERTIFICATE_SUBJECT”, NULL); CertGetCertificateContextProperty(pCert, CERT_KEY_PROV_INFO_PROP_ID, NULL, &len); pinfo = (CRYPT_KEY_PROV_INFO *) malloc(len); CertGetCertificateContextProperty(pCert, CERT_KEY_PROV_INFO_PROP_ID, pinfo, &len); provname = wide_to_asc(pinfo->pwszProvName); contname = wide_to_asc(pinfo->pwszContainerName); if(!CryptAcquireContextA(&hCryptProv, contname, […]

使用Blowfish加密和解密邮件

以下是加密和解密消息的基本代码: #include #include #include //gcc cryptage.c -o cryptage -lcrypto int main(){ BF_KEY *key = malloc(sizeof(BF_KEY)); unsigned char *crypt_key = “Key of encryption”; const unsigned char *in = “Message to encrypt”; int len = strlen(crypt_key); unsigned char *out = malloc(sizeof(char)*len); unsigned char *result = malloc(sizeof(char)*len); //Defining encryption key BF_set_key(key, len, crypt_key); //Encryption BF_ecb_encrypt(in, out, key, BF_ENCRYPT); […]

使用AES-128 / CBC时,EVP_DecryptFinal_ex中的间歇性解密失败

我正在使用此处的EVP库: https : //www.openssl.org/docs/manmaster/crypto/EVP_EncryptInit.html 这是我的两个加密和解密function: 我正在尝试使用AES 128 CBC加密字符串。 该字符串的格式通常为word1 word2 word3 char* encrypt(char *s, char *key) { unsigned char iv[16] = {[0 … 15 ] = 0}; unsigned char outbuf[1024] = {[0 … 1023] = 0}; int outlen1, outlen2; EVP_CIPHER_CTX ctx; EVP_CIPHER_CTX_init(&ctx); EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, key, iv); if (EVP_EncryptUpdate(&ctx, outbuf, &outlen1, s, strlen(s)) == 1) […]

C – 使用CBC(密码块链接)模式的OpenSSL加密

我正在使用OpenSSL的 C-API,但我对如何在OpenSSL中使用IV ( 初始化向量 )感到困惑。 说,我有 plaintext.txt file = “This is a top secret.” Key = “example#########” IV = 010203040506070809000a0b0c0d0e0f 当我使用OpenSSL AES-128-CBC加密时,我应该得到: e5accdb667e8e569b1b34f423508c15422631198454e104ceb658f5918800c22 当我尝试这个时(密钥转换为hex),这是真的: openssl enc -aes-128-cbc -e -in plaintext.txt -out ciphertext.bin -K 6578616d706c65232323232323232323 -iv 010203040506070809000a0b0c0d0e0f 我明白了: xxd -p ciphertext.bin e5accdb667e8e569b1b34f423508c15422631198454e104ceb658f5918800c22 但是我用C得到了不同的密文 char plaintext[] = “This is a top secret.”; unsigned char iv[16] = { […]

如何为PRNG播种BN_generate_prime

我无法在openssl / bn.h中找到关于用BN_generate_prime生成素数的答案。 另外,我如何播种此函数使用的PRNG? 单独的问题,但与我的代码相关(我正在编写一个程序来生成RSA密钥对):我如何检查是否在BIGNUM中设置了高阶位? 假设我生成512位素数。 我会使用BN_is_bit_set(素数,512)吗? 谢谢

c中的OpenSSL命令用于获取RSA中公钥的模数

我们想在C中找到一个OpenSSl方法,它只使用RSA从公钥中获得模数。 但是我们不确定使用哪种方法。 d2i_RSAPublicKey函数是否有效,但我们不确定它需要什么参数? “ 以下open ssl命令的c方法是什么,它只提取模数: $ openssl ssl rsa -inform der -pubin -text < 12120862.key Public-Key: (1024 bit) Modulus: 00:81:1f:1d:00:7e:d0:c7:e2:2f:31:3d:0d:f0:a8: ab:c1:ea:66:ba:af:1d:a4:eb:b3:fd:51:58:1c:1d: 81:ae:f0:99:9e:5c:26:67:b5:41:14:28:79:c0:29: e5:56:96:06:b7:4b:a0:c9:7f:41:46:9a:7e:85:10: a0:91:ea:58:bd:78:78:6d:3c:07:2a:3d:61:f3:ed: 42:8b:1e:dc:6d:2d:21:41:7a:e8:15:51:0d:75:84: be:20:8c:76:43:8b:4b:67:6b:49:09:e9:20:a1:11: 53:a0:d9:30:b1:c2:27:a6:09:e1:56:36:ed:7e:9b: 23:e2:df:5b:bd:c5:66:ca:c5 Exponent: 65537 (0x10001) writing RSA key —–BEGIN PUBLIC KEY—– MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCBHx0AftDH4i8xPQ3wqKvB6ma6 rx2k67P9UVgcHYGu8JmeXCZntUEUKHnAKeVWlga3S6DJf0FGmn6FEKCR6li9eHht PAcqPWHz7UKLHtxtLSFBeugVUQ11hL4gjHZDi0tna0kJ6SChEVOg2TCxwiemCeFW Nu1+myPi31u9xWbKxQIDAQAB —–END PUBLIC KEY—–

非阻塞连接OpenSSL

我创建了一个普通的C套接字。 在连接时,它按预期返回EWOULDBLOCK/WSAEWOULDBLOCK ,因为我做了: unsigned long int mode = 0; ioctlsocket(ssl_info->sock, FIONBIO, &mode); setsockopt(ssl_info->sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&tv, sizeof(tv)); setsockopt(ssl_info->sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&tv, sizeof(tv)); 将套接字置于非阻塞模式。 之后我做了: ssl = SSL_new(ctx); SSL_set_fd(ssl, sock); return SSL_connect(ssl); 但是,它返回-1。 我在网上看到,这意味着我需要处理SSL_ERROR_WANT_READ和SSL_ERROR_WANT_WRITE 。 所以我做了: int res = -1; while(res == -1) { res = SSL_connect(ssl); switch (SSL_get_error(ssl, res)) { case SSL_ERROR_WANT_CONNECT: MessageBox(NULL, “Connect Error”, […]