Tag: openssl

OpenSSL AES 256 CBC通过EV中的EVP api

我要做的是:在C中编写一个程序,打开一个任意大小的文件并读取其内容。 一旦读取内容,它将在AES 256 CBC中对它们进行加密,并将密文保存到名为密文的文件中。 保存后,它将关闭这两个文件。 然后将打开刚刚保存的文件中的密文并解密密文并将其保存到名为decrypted的文件中。 我的问题:似乎永远不会解密我的密文。 我得到垃圾,我不知道我做错了什么。 请帮忙。 #include #include #include #include #include void encrypt(FILE *ifp, FILE *ofp) { //Get file size fseek(ifp, 0L, SEEK_END); int fsize = ftell(ifp); //set back to normal fseek(ifp, 0L, SEEK_SET); int outLen1 = 0; int outLen2 = 0; unsigned char *indata = malloc(fsize); unsigned char *outdata = malloc(fsize*2); […]

如何使用OpenSSL进行AES解密

我想使用OpenSSL库来解密一些AES数据。 代码可以访问密钥。 这个项目已经将libopenssl用于其他方面了,所以我想坚持使用这个库。 我直接查看了/usr/include/openssl/aes.h因为OpenSSL网站对文档很轻松。 唯一的解密function就是这个: void AES_decrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key); 不幸的是,这没有办法指定in指针的长度,所以我不确定它是如何工作的。 我认为还有其他一些function可以用数字参数来区分加密和解密。 例如: void AES_ecb_encrypt(*in, *out, *key, enc); void AES_cbc_encrypt(*in, *out, length, *key, *ivec, enc); void AES_cfb128_encrypt(*in, *out, length, *key, *ivec, *num, enc); void AES_cfb1_encrypt(*in, *out, length, *key, *ivec, *num, enc); void AES_cfb8_encrypt(*in, *out, length, *key, *ivec, *num, enc); […]

在GCC中链接libssl和libcrypto

我正在尝试使用OpenSSL的EVP接口进行一些加密。 我很确定我的代码是正确的,但我似乎无法编译它。 我正在使用GCC,并且安装了libssl-dev的Ubuntu 32位精确版和最新版本。 该项目目前包含一个文件program.c 。 #include … i = EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha1() … ); … EVP_CIPHER_CTX_init(e_ctx); 以及其他各种电话。 这是我如何调用gcc: gcc -Wall -g -lssl -lcrypto -o program program.c 然后我得到这样的输出 /home/andy/program/program.c:31: undefined reference to `EVP_sha1′ /home/andy/program/program.c:31: undefined reference to `EVP_aes_256_cbc’ /home/andy/program/program.c:31: undefined reference to `EVP_BytesToKey’ /home/andy/program/program.c:44: undefined reference to `EVP_CIPHER_CTX_init’ 所以包含显然在起作用: andy@ProgStation2:/usr/include$ find . | grep evp.h ./openssl/evp.h […]

为什么我无法使用PEM_read_RSAPublicKey读取openssl生成的RSA pub密钥?

我正在尝试读取使用openssl生成的RSA公钥,如下所示: Private Key: openssl genrsa -out mykey.pem 1024 Public Key afterwards: openssl rsa -in mykey.pem -pubout > somewhere.pub 然后我试着读: FILE *keyfile = fopen(“somewhere.pub”, “r”); RSA *rsa_pub = PEM_read_RSAPublicKey(keyfile, NULL, NULL, NULL); //rsa_pub == NULL! 当我正在阅读私钥时,它可以工作 FILE *keyfile = fopen(“mykey.pem”, “r”); RSA *rsa_pri = PEM_read_RSAPrivateKey(keyfile, NULL, NULL, NULL); //all good 有任何想法吗? 我已经读过openssl生成RSA公钥的X509密钥。 但我甚至无法加载X509发布密钥。 谢谢

读取和写入C中的pem文件的rsa键

我正在编写一个C程序来为RSA生成密钥并将它们写入文件然后从中读取。 作业要求我以openssl格式生成文件。 所以,我选择了PEM。 现在,我有以下创建文件的function rsa = RSA_new(); // These 3 keys are generated beforehand rsa->e = e; rsa->n = n; rsa->d = d; fp = fopen(pubkey_file, “w”); if(!PEM_write_RSAPublicKey(fp, rsa)) { printf(“\n%s\n”, “Error writing public key”); } fflush(fp); fclose(fp); fp = fopen(privkey_file, “w”); // pRsaKey = EVP_PKEY_new(); // EVP_PKEY_assign_RSA(pRsaKey, rsa); if(!PEM_write_RSAPrivateKey(fp, rsa, NULL, 0, 0, NULL, […]

使用openssl C进行AES(aes-cbc-128,aes-cbc-192,aes-cbc-256)加密/解密

我只想用openSSL测试这三种模式的AES:128,192和256密钥长度,但我的解密文本与我的输入不同,我不知道为什么。 此外,当我传递一个巨大的输入长度(比方说1024字节)时,我的程序显示core dumped …我的输入始终是相同的,但它无关紧要,至少现在。 inheritance人代码: #include #include #include #include int main(int argc, char **argv) { int i; int keylength; printf(“Give a key length [only 128 or 192 or 256!]:\n”); scanf(“%d”, &keylength); /* generate a key with a given length */ unsigned char aes_key[keylength]; memset(aes_key, 0, sizeof(aes_key)); if (!RAND_bytes(aes_key, keylength)) { exit(-1); } aes_key[keylength-1] = ‘\0’; […]

使用OpenSSL API以编程方式validation证书链

这与其他问题非常相似,但我所看到的问题要么没有答案,要么也不会问同样的问题。 我有一个自签名CA证书,以及使用该CA证书签名的另外两个证书。 我很确定证书是正确的,因为’openssl verify’有效: $ openssl verify -CAfile ca.pem server.pem server.pem: OK (以上是从记忆中,我没有它们在我面前,所以它可能稍微偏离)。 现在我想以编程方式validation证书。 我有一个实用函数,下面是伪代码: int verify_cert(X509 *cert, X509 *cacert) { int ret; X509_STORE *store; X509_STORE_CTX *ctx; store = X509_STORE_new(); X590_STORE_add_cert(store, cacert); ctx = X509_STORE_CTX_new(); X509_STORE_CTX_init(ctx, store, cert, NULL); ret = X590_verify_cert(ctx); /* check for errors and clean up */ } 我的问题是上面的代码总是返回“找不到发行者证书”。 我做错了什么? 我相信我正在创建一个新的商店,添加cacert,创建一个新的上下文,并使用指向包含CA的商店的指针将要validation的子证书添加到上下文中。 我显然做错了什么,但我不确定是什么。 […]

如何以编程方式在OpenSSL中加载PKCS#12文件?

在基于OpenSSL的SSL服务器应用程序中,我们如何以编程方式加载PKCS#12文件? 另外,我可以在OpenSSL的同一文件中加载具有证书,密钥和CA的PKCS#12文件吗?

AES CTR 256加密OpenSSL上的操作模式

我是OpenSSL的新手,任何人都可以给我一个如何从C文件初始化AES CTR模式的提示。 我知道这是方法的签名,但我遇到了参数问题,没有很多文档也没有明确的例子如何进行简单的加密。 如果有人可以举例说明这种方法,我将不胜感激。 提前致谢! void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out, const unsigned long length, const AES_KEY *key, unsigned char ivec[AES_BLOCK_SIZE], unsigned char ecount_buf[AES_BLOCK_SIZE], unsigned int *num); Hi Caf我真的很感谢你的快速回答它真的很有用,而且是我在网上找到的最好的例子。 我试图打开一个长度不确定的文件,加密它并用生成的密文写入另一个文件,然后打开加密文件并恢复明文。 我需要使用相当数量MB的文件,因为我想对CPU的性能进行基准测试。 但是我在解密时仍然遇到问题。 不知何故,当解密相当大的txt文件(1504KB)时,它不会解密它完成,我得到一半的明文,另一半仍然加密。 我认为这可能与iv的大小或我打电话给柜台的方式有关。 这是我到目前为止: #include #include #include struct ctr_state { unsigned char ivec[16]; unsigned int num; unsigned char ecount[16]; }; FILE *fp; […]

错误:“在OpenSSL 1.1.0中无效使用不完整类型’RSA {aka struct rsa_st}”

我有旧的代码编写链接旧版本的openssl。 此代码的一部分从PEM文件加载密钥,并尝试通过使用以下代码来了解此密钥是私钥还是公钥: if( (prv->p==0 || prv->q==0) ) { // This is not a private key! throw error(“No private key for decryption”); } 使用最新版本的openssl,这(有理由)不编译: crypto.cpp: In function ‘key* decrypt_header(file_t, RSA*)’: crypto.cpp:158:13: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ if( (prv->p==0 || prv->q==0) ) { ^~ 我理解直接访问struct的私有成员被替换为一个函数,但我很难搞清楚哪个函数是什么。