我正在使用一个程序,因为我忘记了一个 rar 密码,并且它会根据密码长度尝试保存密码。
这是因为它是共享软件而产生的限制还是 rar 密码的最大大小确实有限制?
答案1
nixda
以下是答案的证明:
我在 Linux 上使用 rar v4 和 unrar v4.10。
我写了一个C代码来测试密码的长度:
int main(void){
char password[150];
int i=0, j =0;
int r;
for (i=0; i<150 ; i++){
r = rand()%10;
password[i]= (char)(((int)'0')+r);
}
char command[300] = {'\0'};
sprintf(command, " rar a -p[%s] hi.rar hi.txt",password);
printf("password: %s\n", command);
system(command);
usleep(50000);
char newcommand[300] = {'\0'};
char newpassword[150] = {'\0'};
for (i= 0 ; i < 301; i++){
for(j=0; j<i; j++){
newpassword[j] = password[j];
}
sprintf(newcommand, " unrar e -p[%s] -o+ hi.rar",newpassword);
if (system(newcommand) >= 0 ){
printf("i: %d\n",i);
printf("password length: %d\n", strlen(newpassword));
// break;
}
strcpy(newpassword, "0");
usleep(500000);
}
return 0;
}
它创建一个长度为 150 个字符的随机数字(0 到 9)密码,然后压缩一个示例文件(在本例中为 hi.txt)。在代码的第二部分,它尝试使用之前生成的密码从第 1 个字符到第 150 个字符进行解压缩。我添加了usleep
能够监视输出的功能(或者您可以script
在 Linux 上使用它来保存输出然后读取它们)。
我得到的结果是在 126 个索引处解压加密文件,这意味着它会在第 127 个字符后截断密码(请注意索引从 开始0
)。
Extracting from hi.rar
Extracting hi.txt 40%
CRC failed in the encrypted file hi.txt. Corrupt file or wrong password.
Total errors: 1
i: 124
password length: 124
UNRAR 4.10 freeware Copyright (c) 1993-2012 Alexander Roshal
Extracting from hi.rar
Extracting hi.txt 40%
CRC failed in the encrypted file hi.txt. Corrupt file or wrong password.
Total errors: 1
i: 125
password length: 125
UNRAR 4.10 freeware Copyright (c) 1993-2012 Alexander Roshal
Extracting from hi.rar
Extracting hi.txt OK
All OK
i: 126
password length: 126
UNRAR 4.10 freeware Copyright (c) 1993-2012 Alexander Roshal
Extracting from hi.rar
Extracting hi.txt OK
All OK
i: 127
password length: 127
Extracting from hi.rar
Extracting hi.txt OK
All OK
i: 128
password length: 128
UNRAR 4.10 freeware Copyright (c) 1993-2012 Alexander Roshal
Extracting from hi.rar
Extracting hi.txt OK
All OK
i: 129
password length: 129
答案2
RAR 压缩文件的最大密码长度为 127 个字符。较长的密码将被截断为此长度