前一段時間,我在Python中製作了一個腳本,它接受了一個字符串,並將所有字符與其中的一組字符進行比較,將所有字符移至右側。移植PHP密碼的行爲與Python對應行爲不同
的Python代碼:
def Cypher(self,StrMsg,StrCode,IntCypher):
self.StrNwMsg = ""
IntI = IntCypher
for IntO in range(0,len(StrMsg)):
IntI += 1
for IntL in range(0,len(StrCode)):
if StrMsg[IntO] == StrCode[IntL]:
if(IntL + IntI) < len(StrCode):
self.StrNwMsg += StrCode[IntL + IntI]
else:
while (IntL + IntI) >= len(StrCode):
IntI -= len(StrCode)
self.StrNwMsg += StrCode[IntL + IntI]
return self.StrNwMsg
的PHP代碼:
function Cyther($Msg,$StrCode,$IntCypther){
$NewMsg = "";
$I = $IntCypther;
for($O = 0; $O <= strlen($Msg)-1;$O++){
$I += 1;
for($L = 0; $L <= count($StrCode)-1;$L++){
if($Msg[$O] == $StrCode[$L]){
if(($L+$I) < (count($StrCode)-1)){
$NewMsg .= $StrCode[$L+$I];
}else{
while(($L + $I) >= (count($StrCode)-1)){
$I -= count($StrCode)-1;
}
$NewMsg .= $StrCode[$L+$I];
}
}
}
}
return $NewMsg;
}
,但我想讓它在PHP來存儲密碼,因爲你可以改變INTI到用戶ID所以數據是商店將永遠有一個很好的隱藏密碼。但PHP代碼不起作用。這裏要說的是它們都使用數組:(我去掉括號擺脫任何混亂的數組是一維)
"A","B","C","D","E","F","G","H","I","J",
"K","L","M","N","O","P","Q","R","S","T",
"U","V","W","X","Y","Z","a","b","c","d",
"e","f","g","h","i","j","k","l","m","n",
"o","p","q","r","s","t","u","v","w","x",
"y","z","1","2","3","4","5","6","7","8",
"9","0",".",",","'","?","!"," ","_","-"
好了,所以,當我輸入「樣本」中,PHP和Pyhton腳本都返回「P0n152v」,但是當我輸入「0A」,PHP返回「d」和此錯誤:
Undefined offset: -57 in /var/www/Test_Page/Encryption/Encrypt.php on line 25
誤差指的是這行代碼$NewMsg .= $StrCode[$L+$I];
因爲$L + $I
被淘汰$StrCode
數組的範圍的。但我沒有在相同的Python代碼中遇到這個問題。
和Python返回'CM',這是他們都應該返回。我現在至少重寫了這段代碼至少6次,我不知道爲什麼即將發生這個問題。任何人都知道爲什麼我有這個問題。
只是爲PHP和Python腳本添加IntCypther變量爲10。
請注意,我將空格改爲了@符號,以便我確保它在那裏。 – Mike