我正在使用密码技术VigenèreCipher制作一个加密和解密明文的代码。
加密代码工作正常,但我的解密代码有问题。
要解密:
我用明文密码(编码)读取一个文件并选择一个两位数的十六进制,用我的密钥创建一个XOR
,然后它返回给我
原始邮件编码。
问题是我在所有这个过程之后遇到了问题。
该算法效果很好......它解密,但似乎有问题
使用EOF
,因为代码在进程后返回错误并且不让我关闭文件。
我们的想法是将密码XOR
密钥保存在文件中:
fprintf(fpOut, "%c", ch ^ key[i % KEY_LENGTH]);
XOR
key = message)我的原始代码(简化)就是这个:
#include <stdio.h>
#include <stdint.h>
#define KEY_LENGTH 2 // Can be anything from 1 to 13
int main ( void ) {
unsigned char ch;
FILE *fpIn, *fpOut;
int i;
unsigned char key[KEY_LENGTH] = {0xA1, 0x2F};
fpIn = fopen("ctext.txt", "r");
fpOut = fopen("dtext.txt", "w");
i = 0;
while (fscanf(fpIn, "%02x", &ch) != EOF) {
printf ("\n Value read: %x", ch);
if (ch != '\n'){
ch = ch ^ key[i % KEY_LENGTH];
i++;
}
printf ("\n Value after XOR: %c", ch);
}
fclose(fpIn);
fclose(fpOut);
return;
}
谁能看到我做错了什么?
答案 0 :(得分:2)
如果使用<html>
<head>
<script type='text/javascript'>
function addScript()
{
var newdiv = document.createElement('div');
var p = document.createElement('p');
p.innerHTML = "Dynamically added text";
newdiv.appendChild(p);
var script = document.createElement('script');
script.innerHTML = "alert('i am here');";
newdiv.appendChild(script);
document.getElementById('target').appendChild(newdiv);
}
</script>
</head>
<body>
<input type="button" value="add script" onclick="addScript()"/>
<div>hello world</div>
<div id="target"></div>
</body>
</html>
选项编译代码,将显示以下消息:
-Wall
错误是传递给test.c: In function ‘main’:
test.c:471:5: warning: format ‘%x’ expects argument of type ‘unsigned int *’, but argument 3 has type ‘unsigned char *’ [-Wformat=]
while (fscanf(fpIn, "%02x", &ch) != EOF) {
^
的变量类型。您传递的是char变量的地址,大多数是8位。
scanf
将该地址作为scanf
指针,并用unsigned int
字节写入。
在sizeof(unsigned int)
变量之后声明的第一个变量是ch
。此变量被fpIn
覆盖,这就是您无法关闭输入文件的原因:由于指针已损坏。