我想將軟件許可證密鑰存儲在我的mysql數據庫的某個字段中,但我希望將許可證號存儲爲加擾格式,以便如果數據庫已損壞,許可證密鑰將無法使用。我想將軟件許可證密鑰打入/從mysql數據庫解密/解密
有3種可能的情形與許可鍵:
- 它可以爲null - 一些用戶將不必存儲在數據庫中還沒有許可證密鑰。
- 它可能是一個25位許可證,與由連字符分隔的每5個字符:例如:ABCD1-EFGH2-IJKL3-MNOP4-QRST5
- 它可能是一個10位許可證,所有這些都是數字和有沒有分隔符:例如:1234567890
我想在存儲之前將許可證加擾,然後在登錄後向用戶顯示時再次運行相同的加擾函數以解密許可證。
我想我需要先檢查許可證的大小。
- 如果0,則什麼也不做。我可以在加載函數之前檢查它是否爲null。
- 如果是29,則使用連字符分隔符對許可證的各個部分進行洗牌,例如2nd & 4th,也許可以使用str_rot13更改字母字符。
- 如果是10,請選擇第3,5,7,&第9個字符並更改它們的順序。如9日和5日,7日。
我設置如下:
function scramble($scramblestr) {
// check string length
$length = strlen($scramblestr);
// if 10 digit license (all numbers)
if ($length == 10) {
$1st = substr($scramblestr, 0, 1);
$2nd = substr($scramblestr, 1, 1);
$3rd = substr($scramblestr, 2, 1);
$4th = substr($scramblestr, 3, 1);
$5th = substr($scramblestr, 4, 1);
$6th = substr($scramblestr, 5, 1);
$7th = substr($scramblestr, 6, 1);
$8th = substr($scramblestr, 7, 1);
$9th = substr($scramblestr, 8, 1);
$10th = substr($scramblestr, 9, 1);
// swap 3rd character with 7th/swap 5th character with 9th
$scramblestr = $1st . $2nd . $7th . $4th . $9th . $6th . $3rd . $8th . $5th . $10th;
// if 25 digit license (with hyphen separators)
} elseif ($length == 29) {
$scramblestr = array_filter(explode('-', $scramblestr), 'strlen');
// swap 2nd & 4th sections
$scramblestr = $scramblestr[0] . "-" . $scramblestr[3] . "-" . $scramblestr[2] . "-" . $scramblestr[1] . "-" . $scramblestr[4];
// swap alpha characters 13 places in the alphabet
$scramblestr = str_rot13($scramblestr);
// if null or if stored incorrectly (for example if the license is not null but contains an invalid number of characters)
} else {
$scramblestr = "Unknown";
}
return $scramblestr;
}
然而,這會導致以下服務器500錯誤:
PHP Parse error: syntax error, unexpected '1' (T_LNUMBER), expecting variable (T_VARIABLE) or '$'
這點,第一SUBSTR參考。但是,根據php.net,它應該是一個整數,用於在此處指定字符串的長度。
任何想法?
或者是否有更有效的方法來執行此操作?還是有沒有人有其他可能適合的方法?
不太清楚:但是一個變量不能被(部分)的數字,可以嗎? – CaptainCarl
你爲什麼不把它散列呢? – Daan
請參閱答案[這裏](http://stackoverflow.com/questions/16600708/how-do-you-encrypt-and-decrypt-a-php-string) – LMS94