php - 解析一个文件并使用该数据解密另一个文件的数据

标签 php file parsing encryption str-replace

我正在尝试根据另一个文件中的映射转换一个文件中的一些数据。

我的加密方案如下所示:

0 => 129367
1 => 998023
2 => 971513
3 => 365366
4 => 247647
5 => 131747
6 => 86151
7 => 898342
8 => 591121
9 => 828966
a => 185363
b => 420016
c => 472728
d => 185475
e => 669058
f => 472944
g => 932915
h => 109171
i => 940561
j => 483250
k => 240419
l => 158223
m => 494635
n => 205943
o => 19961
p => 989725
q => 125777
r => 195604
s => 818227
t => 83779
u => 990539
v => 639213
w => 669743
x => 546240
y => 950155
z => 631005
A => 126161
B => 403898
C => 323151
D => 536228
E => 653494
F => 810236
G => 808261
H => 900915
I => 60916
J => 417663
K => 371534
L => 384244
M => 900004
N => 300998
O => 346538
P => 5044
Q => 558707
R => 404479
S => 183163
T => 505254
U => 497969
V => 197795
W => 953877
X => 394637
Y => 760236
Z => 211436
! => 601326
" => 15745
# => 428427
$ => 602548
% => 938126
& => 159405
' => 528113
( => 8021
) => 910309
* => 747795
+ => 232242
, => 731593
- => 808534
. => 429705
/ => 916854
: => 241543
; => 755104
< => 314595
= => 398161
> => 606925
? => 804662
@ => 713498
[ => 431477
\ => 80381
] => 36645
^ => 156790
_ => 34787
` => 107682
{ => 283663
| => 650856
} => 91921
~ => 752056
  => 494223
     => 521932

 => 816279
 => 301703
 => 17163
 => 867641
ą => 817209
ś => 594615
ż => 570356
ź => 913303
ł => 752084
ó => 838178
ę => 693877
ń => 564418
ć => 30975
Ż => 707466

我的加密文本如下所示:

631005,323151,810236,60916,384244,346538,404479

我尝试使用以下代码替换循环中的字符:

$my_file = 'encrypted_text.txt';
$handle = fopen($my_file, 'r');
$data = fread($handle,filesize($my_file));
echo "\n".$data."\n";

$file = fopen("encryption_scheme.txt", "r");
$members = array();

while (!feof($file)) 
{
    $code = substr(fgets($file), strrpos(fgets($file), '=> ' )+1); 
    $code = str_replace('>', '', $code);
    $code = str_replace(' ', '', $code);
    $letter = substr(fgets($file), 0, 1);
    $data = str_replace(',', ' ', $data);
    $data = str_replace($code, $letter, $data); 
}
echo $data;

fclose($file);

但是它没有得到解密的文本,而是重复类似的代码

631005,323151,810236,60916,384244,346538,404479

631005 323151 810236 60916 384244 346538 404479

更新

while (!feof($file)) 
{
    $text = fgets($file);
    $code = substr($text, strrpos($text, '=> ' )+1); 
    $code = str_replace('>', '', $code);
    $code = str_replace(' ', '', $code);
    $letter = substr($text, 0, 1);
    $data = str_replace(',', ' ', $data);
    $data = str_replace($code, $letter, $data); 
}

我期望得到 z C F I L O R 的结果。

最佳答案

您的第一个问题是,fgets 返回文本包括换行符(并且取决于系统回车符)。

你的第二个问题是,某些“字母”的长度不是“一个字符”(即末尾的 unicode 字符)。

你的第三个问题是,如果加密方案发生变化,你可能会遇到意想不到的结果。假设您的加密方案是这样的:

a => 1
b => 12
c => 2

显然是 b 的文本 12 会变成 ac (因为顺序)。

在我看来,这得出的结论是,mickmackusa 的答案是最好的 - 特别是他答案的第二部分,逐个代码地检查密文。

我的旧解决方案

我可能会使用

$data = str_replace(',', ' ', $data); // do this once, not every iteration

while($text = fgets($file) { // fgets returns false on eof
    list($letter, $code) = explode(' => ', $text, 2);
    $code = trim($code); // <-- removes whitespace and new lines and so on
    $data = str_replace($code, $letter, $data);
}

更新:

// expand the text, if no "=>" is found:
while(...) {
    if(strpos($text, '=>') === FALSE) {
        $text = fgets($text);
    }
    if(!trim($text)) { // completely empty lines, even after expanding (EOF)
        break;
    }
    // rest as before
}

关于php - 解析一个文件并使用该数据解密另一个文件的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55117731/

相关文章:

perl - 在 Perl 中解析垂直分隔的文件

parsing - 如何解析文本并提取整数

php - 将多维数组插入mysql PHP的递归函数

php - 读取标题后中止上传大文件

php - Google SEO - 如何获得这样的网站搜索结果?

Python 字符串作为子进程的文件参数

ios - 解析数据未出现在 iOS 9 Beta 4 中

javascript - 为什么 php 不删除由 javascript 设置的 cookie?

c - 从文本文件读取行到结构 C

python - 在 python 中获得相当于 "find ."的最简单方法?