4

在我们的一个 Web 应用程序中(在 PHP、MySQL 中),我们将用户的手机号码保存为加密值,并在我们向他们发送 SMS 时对其进行解密。该应用程序运行良好。但

现在 GoDaddy 删除了选项 base64_encode 和 decode。这样我们就无法向用户发送短信。因此,我们将手机号码恢复到在本地运行的正常状态。

我的问题是使用密钥加密和解密字符串的最简单和安全的方法。

就像是

Normal string : 9876543210  -> After encrypt with a key -> AASASOOPFPOEROP45664654456
Encrypted string : AASASOOPFPOEROP45664654456 -> on decrypt -> 9876543210 

我当前的代码

function encodeString($str){
  for($i=0; $i<5;$i++)
  {
    $str=strrev(base64_encode($str)); //apply base64 first and then reverse the string
  }
  return $str;
}


function decodeString($str){
 for($i=0; $i<5;$i++)
 {
    $str=base64_decode(strrev($str)); //apply base64 first and then reverse the string}
 }
 return $str;
}

请帮我 。提前致谢

4

2 回答 2

4

好吧,如果您使用的是 base64 编码/解码,那么您并没有加密数据,只是混淆了数据。

我不知道 Godaddy 启用了哪些 php 扩展,所以我建议使用 phpSecLib 之类的东西

http://phpseclib.sourceforge.net/

它是一个独立的实现,您可以将其包含在您的脚本中,并将为您的数据提供实际加密。AES 或 Rijndael 应该适用于您的应用程序

基本上它会用一个密钥加密字符串,即使你的数据库被泄露,如果没有加密它的密钥(你会硬编码到你的脚本中),数据也无法解密。这与简单地对其进行编码不同,在这种情况下,如果有人掌握了数据库,他们可以通过各种不同的编码方法运行第一个字符串来解码它,直到找到一个有效的方法。然后通过相同的解码方法运行其余部分

于 2013-06-19T04:23:58.757 回答
3

在这里,我给你一个简单的例子,你可以使用我们自己的密钥,如下所示

// 用于加密/解密的密钥

$key='mysecretkey';// 8-32 个字符,不含空格

// 要加密的字符串

$string1='your sample key, that is the question'; 

//加密字符串

$string2=convert($string1,$key); 

// 解密回来

$string3=convert($string2,$key);

// 测试输出

  echo '<span style="font-family:Courier">'; 
    echo 'Key: '.$key.'<br>'."\n"; 
    echo $string1.'<br>'."\n"; 
    echo $string2.'<br>'."\n"; 
    echo $string3.'<br>'."\n"; 
    echo '</span>'."\n"; 

输出

Key: mysecretkey
your sample key, that is the question
tvfw#ady{i|-rv|/2q|jq9dj3qkw%e~`jyp|k
your sample key, that is the question

让我知道我可以帮助你更多。

于 2013-06-19T07:28:25.603 回答