PHP加密和解密除了Base64编码以外的方式

5
在我们的一个PHP、MySQL网络应用程序中,我们将用户的手机号码保存为加密值,并在发送短信时进行解密。该应用程序一直运行良好。但是,现在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;
}

请帮忙,谢谢。提前致谢。

2
  1. 那不是加密...那只是编码...虽然你可以争辩说你在上面运行的 strrev 使它成为一个非常薄弱的伪加密...但无论如何。
  2. 这听起来不像是你应该在Godaddy上托管的东西。你可能需要获取一些更高质量的托管服务。
- prodigitalson
@haywire,谢谢你的回复。但是我们不能使用你的解决方案,因为它包含了“base64_encode”,而这个函数在GoDaddy上被禁用了。 - ramesh
2个回答

4

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

我不知道Godaddy启用了哪些php扩展,所以建议使用像phpSecLib这样的东西。

http://phpseclib.sourceforge.net/

这是一个独立实现,您可以将其包含在脚本中,并提供数据的实际加密。AES或Rijndael应该适用于您的应用程序。基本上,它会使用密钥加密字符串,即使您的数据库受到攻击,也无法解密数据,除非使用加密时所用的密钥(您将其硬编码到脚本中)。这与简单地对其进行编码不同,在这种情况下,如果有人掌握了数据库,他们可以通过运行第一个字符串通过各种不同的编码方法来解码它,直到找到一个可行的方法,然后将其余部分通过相同的解码方法运行。

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

请告诉我如何更好地帮助你。


2
致命错误:在//wp-content/themes/twentytwelve/cov.php的第4行中调用未定义的函数convert()。 - IdidntKnewIt
这根本不是一种安全的加密方式。任何试图使用此解决方案或受其启发的任何东西的人都会引发安全灾难。 - Stephen Touset

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接