2016-06-28 90 views
0

我正在嘗試使用客戶名稱生成某種序列號。 這是一個我正在開發的PHP軟件。但我從來沒有做過試驗系統和連續生成這樣的東西。我可以從序列號中提取客戶名稱嗎?

這是我使用生成的序列號代碼:

<?php 
// URL is = http://teionsoft.com/classified/keygen.php?token= 
    $token = @$_POST['token']; 

    if(empty($token)) 
    { 
     echo ' 
     <p>Token can not be blank or zero.</p> 
     <p> 
      <form action="keygen.php" method="post"> 
       <input type="text" name="token" id="token" placeholder="Type in your full name" /><br /><br /> 
       <input type="submit" name="submit" value="Get serial!" /> 
      </form> 
     </p>'; 
     exit; 
    } 

function serialKey() { 
    // Create a token 

    // GUID is 128-bit hex 
    $hash = strtoupper(md5($token)); 

    // Create formatted GUID 
    $guid = ''; 

    // GUID format is XXXXX-XXXXX-XXXXX-XXXXX-XXXXX for readability  
    $guid .= substr($hash, 0, 5) . 
     '-' . 
     substr($hash, 8, 5) . 
     '-' . 
     substr($hash, 12, 5) . 
     '-' . 
     substr($hash, 16, 5) . 
     '-' . 
     substr($hash, 20, 5); 

    // temporary code to test base64 codeing/decoding ; 

    $string = $guid; 
    $encoded = base64_encode($string); 
    $decoded = base64_decode($encoded); 
    echo $encoded ."<br /><br />"; 
    echo $decoded; 
} 

if(isset($_POST['submit'])) 
{ 
    serialKey(); 
} 
?> 

如何從序列號提取客戶的名字嗎?

+0

使用sha256而不是md5 –

+0

爲唯一的ID閱讀此http://php.net/manual/es/function.uniqid.php –

+1

你提到GUID那裏,但你沒有生成一個GUID。查看https://en.wikipedia.org/wiki/Globally_unique_identifier#Algorithm – apokryfos

回答

1

如果我正確理解您的問題,您需要根據客戶名稱生成序列號,然後才能解碼序列號以獲取客戶名稱。

您可以將名稱轉換爲十六進制,但該字符串在大多數情況下會比您現在使用的XXXXX-XXXXX-XXXXX-XXXXX-XXXXX格式更長。

將序列號保存在數據庫中不是更好,因此您只需檢查序列號是否與客戶名稱在同一行?

+0

+1來回答這個問題。最好生成一個隨機的串行代碼,將其與客戶信息一起保存到數據庫中,然後輕鬆查找。 –

+0

這就是說,在某些情況下,軟件可能不會連接到互聯網。因此,解碼序列號將驗證序列是在購買後在我的網站上生成的。 –

0

事實上,你有$hash = strtoupper(md5($token))應該是一個線索,這是一個不可逆轉的變換。如果要將散列用作查找鍵,則需要存儲原始文件。

相關問題