作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个程序,该程序将文件作为输入并输出每行的解密密码。该文件包含三行加密密码。我保证密码可以解密为 4 个字母的单词。鉴于我已经创建了字母的 char[] 。我在使用 LOW LEVEL IO 逐行读取文件并将生成的密码放入新文件中时遇到问题。任何和所有建议表示赞赏!
这是迄今为止我的代码:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define BUFFER_SIZE 1024
int main(void)
{
int f = open("pass.txt", O_RDONLY);
if (f < 0)
return 0;
char buf[1024];
while (my_fgets(buf, sizeof(buf), f))
printf("%s\n", buf);
close(f);
const char *const pass = "$1$6gMKIopE$I.zkP2EvrXHDmApzYoV.B.";
char *result;
int ok;
char guess[] = {'a','a','a','a','\0'};
char ch1=guess[0], ch2=guess[1], ch3=guess[2], ch4=guess[3];
do{
for(ch1; ch1<='z';++ch1)
{
for(ch2='a';ch2<='z';++ch2)
{
for(ch3='a';ch3<='z';++ch3)
{
for(ch4='a';ch4<='z';++ch4)
{
result = crypt(guess, pass);
}
}
}
}
}while(strcmp(result, pass) != 0);
puts(guess);
return 0;
}
int my_fgets(char* buf, int len, int f)
{
for (int i = 0; i < len; i++,buf++)
{
int count = read(f, buf, 1);
if (!count || (buf[0] == '\n'))
{
buf[0] = 0;
return i;
}
}
return 0;
}
文本文件:
$1$6gMKIopE$I.zkP2EvrXHDmApzYoV.B.
$1$pkMKIcvE$WQfqzTNmcQr7fqsNq7K2p0
$1$0lMKIuvE$7mOnlu6RZ/cUFRBidK7PK.
最佳答案
以下代码块似乎有缺陷:
while (my_fgets(buf, sizeof(buf), f))
printf("%s\n", buf);
它的作用是只保留最后一行。其他行被读取并丢弃。
此外,尚不清楚在 do ... while
循环的每次迭代中应如何初始化 ch1
。您将其设置为:
for(ch1; ch1<='z';++ch1)
// ^^^
这不会初始化ch1
。这是一个没有副作用的表达式。
我建议将密码解密的大部分逻辑放在其自己的函数中,并在读取每一行后调用该函数。
void decryptPassword(char* buf)
{
printf("%s\n", buf);
const char *const pass = "$1$6gMKIopE$I.zkP2EvrXHDmApzYoV.B.";
char *result;
int ok;
char guess[] = {'a','a','a','a','\0'};
char ch1=guess[0], ch2=guess[1], ch3=guess[2], ch4=guess[3];
do{
for(ch1; ch1<='z';++ch1)
{
for(ch2='a';ch2<='z';++ch2)
{
for(ch3='a';ch3<='z';++ch3)
{
for(ch4='a';ch4<='z';++ch4)
{
result = crypt(guess, pass);
}
}
}
}
}while(strcmp(result, pass) != 0);
puts(guess);
}
int main(void)
{
int f = open("soc.in", O_RDONLY);
if (f < 0)
return 0;
char buf[1024];
while (my_fgets(buf, sizeof(buf), f))
decryptPassword(buf);
close(f);
return 0;
}
关于c - 非常简单的地穴程序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30609950/
我有一个 Django 应用程序可以重置在 Ubuntu 机器上运行的 unix 用户密码,但我的开发环境是 OS X,我遇到了这个烦人的情况: 操作系统: >>> import crypt >>>
啊!为什么编译器会提示?感谢您的帮助! % gcc -o mine mine.c -lcrypt mine.c: In function 'main': mine.c:19:14: warning:
我不太明白这些错误从何而来。我正在尝试创建一个简单的 C 程序,它接受一个字符串并向 ASCII 值添加偏移量,以便创建一个极其简单的加密。 #include #include #include
我是一名优秀的程序员,十分优秀!