- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
经过研究,我认为是时候寻求一些帮助了,因为我不明白问题出在哪里。我正在使用 OpenSSL 进行加密和解密。我修复了代码,以便更清楚地了解谁可能愿意帮助我。它基本上由三个函数组成:generate_key_pair、example_one、example_two在示例一中,我加载文件的内容,密码学家,将内容放入变量中,解密变量的内容,将结果放入另一个变量中。一切都很完美。在示例二中,我携带文件的内容,密码学家将内容放入文件中,加载文件内容,解密。在这种情况下,当我解密时会出现一个“污垢”,我无法确定如何避免。我将这几句话放在代码中,我用来编译的命令和获得的结果。已经想感谢大家了。
编译:
gcc -std=c99 source\RSA\RSA.c source\RSA\applink.c -Isource\RSA\include -Lsource\RSA\lib\openssl -leay32 -lssleay32 -o build\rsa.exe
代码:
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#include <stdio.h>
#include <string.h>
int generate_key_pair(int KEY_LENGTH, char *PRIVATE_KEY_FILENAME, char *PUBLIC_KEY_FILENAME)
{
FILE *KEY_FILE;
RSA *KEY_PAIR;
int RESULT = 0;
KEY_PAIR = RSA_generate_key(KEY_LENGTH, 17, NULL, NULL);
KEY_FILE = fopen(PRIVATE_KEY_FILENAME,"w");
RESULT = PEM_write_RSAPrivateKey(KEY_FILE, KEY_PAIR, NULL, NULL, 0, NULL, NULL);
fclose(KEY_FILE);
KEY_FILE = fopen(PUBLIC_KEY_FILENAME,"w");
RESULT = (RESULT && PEM_write_RSAPublicKey(KEY_FILE, KEY_PAIR));
fclose(KEY_FILE);
return RESULT;
}
void example_one(int KEY_LENGTH, char *PRIVATE_KEY_FILENAME, char *PUBLIC_KEY_FILENAME)
{
printf("--- EXAMPLE 1: BEGIN---\r\n\r\n");
RSA *PUBLIC_KEY = NULL;
RSA *PRIVATE_KEY = NULL;
FILE *KEY_FILE;
KEY_FILE = fopen(PUBLIC_KEY_FILENAME, "r");
PUBLIC_KEY = PEM_read_RSAPublicKey(KEY_FILE,NULL,NULL,NULL);
KEY_FILE = fopen(PRIVATE_KEY_FILENAME, "r");
PRIVATE_KEY = PEM_read_RSAPrivateKey(KEY_FILE,NULL,NULL,NULL);
int PUBLIC_KEY_SIZE = RSA_size(PUBLIC_KEY);
int PRIVATE_KEY_SIZE = RSA_size(PRIVATE_KEY);
FILE *INPUT_FILE = fopen("BUFFER.TXT", "r");
fseek(INPUT_FILE, 0, SEEK_END);
int INPUT_FILE_SIZE = ftell(INPUT_FILE);
rewind(INPUT_FILE);
char *FILE_CONTENTS = malloc(KEY_LENGTH/8);
fread(FILE_CONTENTS, sizeof(char), INPUT_FILE_SIZE, INPUT_FILE);
fclose(INPUT_FILE);
FILE_CONTENTS[INPUT_FILE_SIZE] = '\0';
printf("ORIGINAL FILE_CONTENTS=\r\n%s\r\n\r\n",FILE_CONTENTS);
char *ENCRYPTED = NULL;
char *DECRYPTED = NULL;
ENCRYPTED = malloc(PUBLIC_KEY_SIZE);
RSA_public_encrypt(strlen(FILE_CONTENTS), (unsigned char*)FILE_CONTENTS, (unsigned char*)ENCRYPTED, PUBLIC_KEY, RSA_PKCS1_OAEP_PADDING);
printf("ENCRYPTED=\r\n%s\r\n\r\n",ENCRYPTED);
DECRYPTED = malloc(PRIVATE_KEY_SIZE);
RSA_private_decrypt(PRIVATE_KEY_SIZE, (unsigned char*)ENCRYPTED, (unsigned char*)DECRYPTED, PRIVATE_KEY, RSA_PKCS1_OAEP_PADDING);
printf("DECRYPTED=\r\n%s\r\n\r\n",DECRYPTED);
free(ENCRYPTED);
ENCRYPTED = NULL;
free(DECRYPTED);
DECRYPTED = NULL;
printf("--- EXAMPLE 1: END---\r\n\r\n");
}
void example_two(int KEY_LENGTH, char *PRIVATE_KEY_FILENAME, char *PUBLIC_KEY_FILENAME)
{
printf("--- EXAMPLE 2: BEGIN---\r\n\r\n");
RSA *PUBLIC_KEY = NULL;
RSA *PRIVATE_KEY = NULL;
FILE *KEY_FILE;
KEY_FILE = fopen(PUBLIC_KEY_FILENAME, "r");
PUBLIC_KEY = PEM_read_RSAPublicKey(KEY_FILE,NULL,NULL,NULL);
KEY_FILE = fopen(PRIVATE_KEY_FILENAME, "r");
PRIVATE_KEY = PEM_read_RSAPrivateKey(KEY_FILE,NULL,NULL,NULL);
int PUBLIC_KEY_SIZE = RSA_size(PUBLIC_KEY);
int PRIVATE_KEY_SIZE = RSA_size(PRIVATE_KEY);
FILE *INPUT_FILE = fopen("BUFFER.TXT", "r");
fseek(INPUT_FILE, 0, SEEK_END);
int INPUT_FILE_SIZE = ftell(INPUT_FILE);
rewind(INPUT_FILE);
char *FILE_CONTENTS = malloc(KEY_LENGTH/8);
fread(FILE_CONTENTS, sizeof(char), INPUT_FILE_SIZE, INPUT_FILE);
fclose(INPUT_FILE);
FILE_CONTENTS[INPUT_FILE_SIZE] = '\0';
printf("ORIGINAL FILE_CONTENTS=\r\n%s\r\n\r\n",FILE_CONTENTS);
char *ENCRYPTED = NULL;
char *DECRYPTED = NULL;
ENCRYPTED = malloc(PUBLIC_KEY_SIZE);
RSA_public_encrypt(strlen(FILE_CONTENTS), (unsigned char*)FILE_CONTENTS, (unsigned char*)ENCRYPTED, PUBLIC_KEY, RSA_PKCS1_OAEP_PADDING);
printf("ENCRYPTED=\r\n%s\r\n\r\n",ENCRYPTED);
FILE *FILE_OUT = fopen("BUFFER_ENCRYPTED.TXT", "w");
fwrite(ENCRYPTED,sizeof(char),strlen(ENCRYPTED),FILE_OUT);
fclose(FILE_OUT);
free(ENCRYPTED);
ENCRYPTED = NULL;
FILE *FILE_IN = fopen("BUFFER_ENCRYPTED.TXT", "r");
fseek(FILE_IN, 0, SEEK_END);
INPUT_FILE_SIZE = ftell(FILE_IN);
rewind(FILE_IN);
FILE_CONTENTS = malloc(PRIVATE_KEY_SIZE);
fread(FILE_CONTENTS, sizeof(char), PRIVATE_KEY_SIZE, FILE_IN);
fclose(FILE_IN);
printf("ENCRYPTED FILE_CONTENTS=\r\n%s\r\n\r\n",FILE_CONTENTS);
DECRYPTED = malloc(PRIVATE_KEY_SIZE);
RSA_private_decrypt(PRIVATE_KEY_SIZE, (unsigned char*)FILE_CONTENTS, (unsigned char*)DECRYPTED, PRIVATE_KEY, RSA_PKCS1_OAEP_PADDING);
printf("DECRYPTED=\r\n%s\r\n\r\n",DECRYPTED);
FILE_OUT = fopen("BUFFER_DECRYPTED.TXT", "w");
fwrite(DECRYPTED,1,strlen(DECRYPTED),FILE_OUT);
fclose(FILE_OUT);
free(DECRYPTED);
DECRYPTED = NULL;
free(ENCRYPTED);
ENCRYPTED = NULL;
free(DECRYPTED);
DECRYPTED = NULL;
printf("--- EXAMPLE 2: END---\r\n\r\n");
}
int main(void) {
int KEY_LENGTH = 2048;
char *PRIVATE_KEY_FILENAME = "KPRIVATE.PEM";
char *PUBLIC_KEY_FILENAME = "KPUBLIC.PEM";
generate_key_pair(KEY_LENGTH,PRIVATE_KEY_FILENAME,PUBLIC_KEY_FILENAME);
example_one(KEY_LENGTH,PRIVATE_KEY_FILENAME,PUBLIC_KEY_FILENAME);
example_two(KEY_LENGTH,PRIVATE_KEY_FILENAME,PUBLIC_KEY_FILENAME);
return 0;
}
结果:
--- EXAMPLE 1: BEGIN---
ORIGINAL FILE_CONTENTS=
It is a test!
ENCRYPTED=
◄4ƒþ×^ÖÜ_)'┘ó(¿o╚¡Õßçxô╝♂:9·╗♂l│¿,<õС+¨═è╣╚IÙL¶,*A1´çØ↔ß%ém¦e sø¥Qþ¯█‼◄Ð]röwK╠
áWÁ]Úl╗Fv├Æ((Ó*║&^
DECRYPTED=
It is a test!
--- EXAMPLE 1: END---
--- EXAMPLE 2: BEGIN---
ORIGINAL FILE_CONTENTS=
It is a test!
ENCRYPTED=
îþ┘éÑ▬ı;Í5±òM¬ƒ¢ÈkÖ╣┌┬ÆbE☺ã`)[ıó▄■fÞ*ªÄ╚↕ 3É^¾µS86qÜz▬a↑zh▓j´¶È)ë├╬ƒC♂Ë·âÃxÛ╝°ÿ@
Å◄ÈJ~\÷a¼?m▒Ít@♀█ñ¼Ä:£z┤ÀýøGöÞ╩30☼→┘G┬$Ã╩ô°Z‗¢re8►♥k'♫W
ês=ðã;Gfd¬♀@¾þw╚¢Ó_lºóó.├╣ß8┤¼yÝ╚þ┬☼¦è+zP"│┴Isd19ģǹ×^╣ñ0‼▀Zƒ¾↑}▬.Æãáý·│yCb?ù©u
_|ıƒÀ
ENCRYPTED FILE_CONTENTS=
îþ┘éÑ▬ı;Í5±òM¬ƒ¢ÈkÖ╣┌┬ÆbE☺ã`)[ıó▄■fÞ*ªÄ╚↕ 3É^¾µS86qÜz▬a↑zh▓j´¶È)ë├╬ƒC♂Ë·âÃxÛ╝°ÿ@
Å◄ÈJ~\÷a¼?m▒Ít@♀█ñ¼Ä:£z┤ÀýøGöÞ╩30☼→┘G┬$Ã╩ô°Z‗¢re8►♥k'♫W
ês=ðã;Gfd¬♀@¾þw╚¢Ó_lºóó.├╣ß8┤¼yÝ╚þ┬☼¦è+zP"│┴Isd19ģǹ×^╣ñ0‼▀Zƒ¾↑}▬.Æãáý·│yCb?ù©u
_|ıƒÀ
DECRYPTED=
It is a test!òM¬ƒ¢ÈkÖ╣┌┬ÆbE☺ã`)[ıó▄■fÞ*ªÄ╚↕ 3É^¾µS86qÜz▬a↑zh▓j´¶È)ë├╬ƒC♂Ë·âÃxÛ╝°
Å◄ÈJ~\÷a¼?m▒Ít@♀█ñ¼Ä:£z┤ÀýøGöÞ╩30☼→┘G┬$Ã╩ô°Z‗¢re8►♥k'♫W
ês=ðã;Gfd¬♀@¾þw╚¢Ó_lºóó.├╣ß8┤¼yÝ╚þ┬☼¦è+zP"│┴Isd19ģǹ×^╣ñ0‼▀Zƒ¾↑}▬.Æãáý·│yCb?ù©u
_¶ƒÀ,
--- EXAMPLE 2: END---
最佳答案
我在 freenode 的 irc#c channel 上找到的解决问题的正确答案:
[kadoban] renatokrause: You're treating DECRYPTED as a zero-terminated string. It's not. You need to use the return value of RSA_private_decrypted, which tells you how much data it output
最终代码:
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#include <stdio.h>
#include <string.h>
int generate_key_pair(int KEY_LENGTH, char *PRIVATE_KEY_FILENAME, char *PUBLIC_KEY_FILENAME)
{
FILE *KEY_FILE;
RSA *KEY_PAIR;
int RESULT = 0;
KEY_PAIR = RSA_generate_key(KEY_LENGTH, 17, NULL, NULL);
KEY_FILE = fopen(PRIVATE_KEY_FILENAME,"w");
RESULT = PEM_write_RSAPrivateKey(KEY_FILE, KEY_PAIR, NULL, NULL, 0, NULL, NULL);
fclose(KEY_FILE);
KEY_FILE = fopen(PUBLIC_KEY_FILENAME,"w");
RESULT = (RESULT && PEM_write_RSAPublicKey(KEY_FILE, KEY_PAIR));
fclose(KEY_FILE);
return RESULT;
}
void example_one(int KEY_LENGTH, char *PRIVATE_KEY_FILENAME, char *PUBLIC_KEY_FILENAME)
{
printf("--- EXAMPLE 1: BEGIN---\r\n\r\n");
RSA *PUBLIC_KEY = NULL;
RSA *PRIVATE_KEY = NULL;
FILE *KEY_FILE;
KEY_FILE = fopen(PUBLIC_KEY_FILENAME, "r");
PUBLIC_KEY = PEM_read_RSAPublicKey(KEY_FILE,NULL,NULL,NULL);
KEY_FILE = fopen(PRIVATE_KEY_FILENAME, "r");
PRIVATE_KEY = PEM_read_RSAPrivateKey(KEY_FILE,NULL,NULL,NULL);
int PUBLIC_KEY_SIZE = RSA_size(PUBLIC_KEY);
int PRIVATE_KEY_SIZE = RSA_size(PRIVATE_KEY);
FILE *INPUT_FILE = fopen("BUFFER.TXT", "r");
fseek(INPUT_FILE, 0, SEEK_END);
int INPUT_FILE_SIZE = ftell(INPUT_FILE);
rewind(INPUT_FILE);
char *FILE_CONTENTS = malloc(KEY_LENGTH/8);
fread(FILE_CONTENTS, sizeof(char), INPUT_FILE_SIZE, INPUT_FILE);
fclose(INPUT_FILE);
FILE_CONTENTS[INPUT_FILE_SIZE] = '\0';
printf("ORIGINAL FILE_CONTENTS=\r\n%s\r\n\r\n",FILE_CONTENTS);
char *ENCRYPTED = NULL;
char *DECRYPTED = NULL;
ENCRYPTED = malloc(PUBLIC_KEY_SIZE);
RSA_public_encrypt(strlen(FILE_CONTENTS), (unsigned char*)FILE_CONTENTS, (unsigned char*)ENCRYPTED, PUBLIC_KEY, RSA_PKCS1_OAEP_PADDING);
printf("ENCRYPTED=\r\n%s\r\n\r\n",ENCRYPTED);
DECRYPTED = malloc(PRIVATE_KEY_SIZE);
RSA_private_decrypt(PRIVATE_KEY_SIZE, (unsigned char*)ENCRYPTED, (unsigned char*)DECRYPTED, PRIVATE_KEY, RSA_PKCS1_OAEP_PADDING);
printf("DECRYPTED=\r\n%s\r\n\r\n",DECRYPTED);
free(ENCRYPTED);
ENCRYPTED = NULL;
free(DECRYPTED);
DECRYPTED = NULL;
printf("--- EXAMPLE 1: END---\r\n\r\n");
}
void example_two(int KEY_LENGTH, char *PRIVATE_KEY_FILENAME, char *PUBLIC_KEY_FILENAME)
{
printf("--- EXAMPLE 2: BEGIN---\r\n\r\n");
RSA *PUBLIC_KEY = NULL;
RSA *PRIVATE_KEY = NULL;
FILE *KEY_FILE;
KEY_FILE = fopen(PUBLIC_KEY_FILENAME, "r");
PUBLIC_KEY = PEM_read_RSAPublicKey(KEY_FILE,NULL,NULL,NULL);
KEY_FILE = fopen(PRIVATE_KEY_FILENAME, "r");
PRIVATE_KEY = PEM_read_RSAPrivateKey(KEY_FILE,NULL,NULL,NULL);
int PUBLIC_KEY_SIZE = RSA_size(PUBLIC_KEY);
int PRIVATE_KEY_SIZE = RSA_size(PRIVATE_KEY);
FILE *INPUT_FILE = fopen("BUFFER.TXT", "r");
fseek(INPUT_FILE, 0, SEEK_END);
int INPUT_FILE_SIZE = ftell(INPUT_FILE);
rewind(INPUT_FILE);
char *FILE_CONTENTS = malloc(KEY_LENGTH/8);
fread(FILE_CONTENTS, sizeof(char), INPUT_FILE_SIZE, INPUT_FILE);
fclose(INPUT_FILE);
FILE_CONTENTS[INPUT_FILE_SIZE] = '\0';
printf("ORIGINAL FILE_CONTENTS=\r\n%s\r\n\r\n",FILE_CONTENTS);
char *ENCRYPTED = NULL;
char *DECRYPTED = NULL;
ENCRYPTED = malloc(PUBLIC_KEY_SIZE);
RSA_public_encrypt(strlen(FILE_CONTENTS), (unsigned char*)FILE_CONTENTS, (unsigned char*)ENCRYPTED, PUBLIC_KEY, RSA_PKCS1_OAEP_PADDING);
printf("ENCRYPTED=\r\n%s\r\n\r\n",ENCRYPTED);
FILE *FILE_OUT = fopen("BUFFER_ENCRYPTED.TXT", "w");
fwrite(ENCRYPTED,sizeof(char),strlen(ENCRYPTED),FILE_OUT);
fclose(FILE_OUT);
free(ENCRYPTED);
ENCRYPTED = NULL;
FILE *FILE_IN = fopen("BUFFER_ENCRYPTED.TXT", "r");
fseek(FILE_IN, 0, SEEK_END);
INPUT_FILE_SIZE = ftell(FILE_IN);
rewind(FILE_IN);
FILE_CONTENTS = malloc(PRIVATE_KEY_SIZE);
fread(FILE_CONTENTS, sizeof(char), PRIVATE_KEY_SIZE, FILE_IN);
fclose(FILE_IN);
FILE_CONTENTS[INPUT_FILE_SIZE] = '\0';
printf("ENCRYPTED FILE_CONTENTS=\r\n%s\r\n\r\n",FILE_CONTENTS);
DECRYPTED = malloc(PRIVATE_KEY_SIZE);
int DECRYPTED_SIZE = RSA_private_decrypt(PRIVATE_KEY_SIZE, (unsigned char*)FILE_CONTENTS, (unsigned char*)DECRYPTED, PRIVATE_KEY, RSA_PKCS1_OAEP_PADDING);
printf("DECRYPTED=\r\n%s\r\n\r\n",DECRYPTED);
FILE_OUT = fopen("BUFFER_DECRYPTED.TXT", "w");
fwrite(DECRYPTED,1,DECRYPTED_SIZE,FILE_OUT);
fclose(FILE_OUT);
free(DECRYPTED);
DECRYPTED = NULL;
free(ENCRYPTED);
ENCRYPTED = NULL;
free(DECRYPTED);
DECRYPTED = NULL;
printf("--- EXAMPLE 2: END---\r\n\r\n");
}
int main(void) {
int KEY_LENGTH = 2048;
char *PRIVATE_KEY_FILENAME = "KPRIVATE.PEM";
char *PUBLIC_KEY_FILENAME = "KPUBLIC.PEM";
generate_key_pair(KEY_LENGTH,PRIVATE_KEY_FILENAME,PUBLIC_KEY_FILENAME);
example_one(KEY_LENGTH,PRIVATE_KEY_FILENAME,PUBLIC_KEY_FILENAME);
example_two(KEY_LENGTH,PRIVATE_KEY_FILENAME,PUBLIC_KEY_FILENAME);
return 0;
}
关于c - 使用openssl(C语言)去除解密结果中的污垢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25916096/
给定一个字符串"5 900 000" 我想通过以下模式使用 gsub 去除空格: gsub(/\s/, '') 但这似乎行不通。也没有: gsub(' ', '') 最佳答案 如果你想就地替换,你需要
我编写了一个程序来抓取网站以获取数据并输出到 Excel 表。该程序使用 Microsoft Visual Studio 2010 用 C# 编写。 大多数时候,我从网站获取内容、解析内容并将数据存储
在 MS Access 2007 项目报告中,我有以下(已编辑)查询: SELECT SomeCol FROM SomeTable 问题是, SomeCol 显然包含一些不可见的字符。例如,我看到一个
如 Removing left recursion 中所述,有两种方法可以去除左递归。 使用一些过程修改原始语法以删除左递归 写文法原来没有左递归 人们通常使用什么来删除(没有)ANTLR 的左递归?
我在 CoreData 中存储了一堆艺术家,并希望按名称对它们进行排序,但忽略前缀“the”。例如,“The Beatles”将被排序为“Beatles”,有点像 iTunes/iPod 的做法。 因
我有一个 WebView ,我想从中删除弹性。现在,当滚动小于 webview 的页面时,它会产生弹性效果,显示下面的背景。我想删除这个。 我尝试过执行以下操作,但没有成功。它找到了 WebDynam
我正在调查我们公司使用 Prometheus 从我们在 Kubernetes 上运行的实验中收集统计数据。有计划使用标签来标记我们的云/集群中特定实验的名称。这意味着我们将生成大量标签,这些标签会随着
我正在添加聚合物元素。我想在单击其(自己的)图像时删除元素(自我)。根据封装,我将不得不让 parent 删除 child 。但这也需要为母体生成聚合物元素(我在这里吗??)。 children.ad
现在如果我点击按钮 A,按钮 B 会显示 DropShadow 效果: Private Sub ButtonA_Click(ByVal sender As System.Object, ByVal
我尝试过这个,但它对我不起作用: char * remove_nl(char * newstr) { newstr = strdup(newstr); newstr[strlen(ne
我陷入了两难境地。我有一个图像,我想占据网页的背景。我希望它横跨屏幕的宽度和高度,并保持那个尺寸。当我使用 标签,我不知道如何将它拉伸(stretch)到没有白条的屏幕上。 wspace 和 hspa
Jade .foo .foo 结果 想要的结果 在 haml 中我会做类似 .foo>< 的事情但这在 Jade 中不起作用。我已经搜索并空手而归如何处理这个问题。我如何达到预期的结果
我是 Maven 的新手,当我尝试将我当前的项目从使用 Ant 转换为 -> 使用 Maven 时遇到了问题。 那个项目需要很多 Jar,我在 mvnrepository 上查找这些 jar 并将它们
我需要一个正则表达式来删除 xml 标记开头和结尾之间的空格。例如:有人创建 xml 并将其发送给我,这样我就可以验证、签名并发送到网络服务。 为此,我需要删除标签开头和结尾之间的空格: String
我写了几个方法来将项目添加到数组中,如果它们已经在数组中,它们将被忽略。在对数据结构做了一些研究之后,我意识到我可以通过简单地将它们放在一个集合中来摆脱重复(特别是因为我不关心对象的顺序)。然而,在玩
使用 HighCharts,我想移除 SVG 曲线上的抗锯齿。 到目前为止,我正在使用这个: $('path').each(function(i,j){$(j).attr('shape-renderi
由于某些奇怪的原因(黑色但不是黑色部分),我的 SeekBar 和拇指后面出现随机阴影。我该如何摆脱它? 我的搜索栏: 拇指.xml progress_appearance.xml(有一些
我有一个 Url,我想获取路径部分但没有尾随文件名。如果 Url 是 http://my.com/dir1/dir2/file.ext 那么我想获取 /dir1/dir2 . 我已经尝试了各种拆分(l
我有这个字符串: dataSourceURL = URL(string:"https://api.abc.com/api/p4/products?pid=uid8225&format=json&off
在我的网页中,我有一个菜单 (HorizontalPanel) 应该隐藏在页面的底部。为此,我尝试使用 RootLayoutPanel 类并在其中添加一个 south 小部件,我成功地做到了。但问
我是一名优秀的程序员,十分优秀!