问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php代码怎么加密最好,不能破解的那种

发布网友 发布时间:2022-04-06 03:41

我来回答

5个回答

懂视网 时间:2022-04-06 08:02

php实现不对称加密的方法:首先创建一个PHP示例文件;然后使用openssl实现非对称加密;最后通过“$rsa = new Rsa('ssl-key');”进行测试即可。

推荐:《PHP视频教程》

PHP实现非对称加密


至于什么是非对称加密,这里就不说啦,大家谷歌去吧。这里说明的是,最近在做一个对外的充值加密服务,那么涉及到这个加密的处理,中间遇到几个小问题,所以记录下,方便自己下次查阅。

详细代码

<?php
/**
 * 使用openssl实现非对称加密
 * 
 * @since 2015-11-10
 */
class Rsa
{
 /**
 * 私钥
 * 
 */
 private $_privKey;
 /**
 * 公钥
 * 
 */
 private $_pubKey;
 /**
 * 保存文件地址
 */
 private $_keyPath;
 /**
 * 指定密钥文件地址
 * 
 */
 public function __construct($path)
 {
 if (empty($path) || !is_dir($path)) {
  throw new Exception('请指定密钥文件地址目录');
 }
 $this->_keyPath = $path;
 }
 /**
 * 创建公钥和私钥
 * 
 */
 public function createKey()
 {
 $config = [
  "config" => 'D:wampinapacheapache2.4.9confopenssl.cnf',
  "digest_alg" => "sha512",
  "private_key_bits" => 4096,
  "private_key_type" => OPENSSL_KEYTYPE_RSA,
 ];
 // 生成私钥
 $rsa = openssl_pkey_new($config);
 openssl_pkey_export($rsa, $privKey, NULL, $config);
 file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key', $privKey);
 $this->_privKey = openssl_pkey_get_public($privKey);
 // 生成公钥
 $rsaPri = openssl_pkey_get_details($rsa);
 $pubKey = $rsaPri['key'];
 file_put_contents($this->_keyPath . DIRECTORY_SEPARATOR . 'pub.key', $pubKey);
 $this->_pubKey = openssl_pkey_get_public($pubKey);
 }
 /**
 * 设置私钥
 * 
 */
 public function setupPrivKey()
 {
 if (is_resource($this->_privKey)) {
  return true;
 }
 $file = $this->_keyPath . DIRECTORY_SEPARATOR . 'priv.key';
 $privKey = file_get_contents($file);
 $this->_privKey = openssl_pkey_get_private($privKey);
 return true;
 }
 /**
 * 设置公钥
 * 
 */
 public function setupPubKey()
 {
 if (is_resource($this->_pubKey)) {
  return true;
 }
 $file = $this->_keyPath . DIRECTORY_SEPARATOR . 'pub.key';
 $pubKey = file_get_contents($file);
 $this->_pubKey = openssl_pkey_get_public($pubKey);
 return true;
 }
 /**
 * 用私钥加密
 * 
 */
 public function privEncrypt($data)
 {
 if (!is_string($data)) {
  return null;
 }
 $this->setupPrivKey();
 $result = openssl_private_encrypt($data, $encrypted, $this->_privKey);
 if ($result) {
  return base64_encode($encrypted);
 }
 return null;
 }
 /**
 * 私钥解密
 * 
 */
 public function privDecrypt($encrypted)
 {
 if (!is_string($encrypted)) {
  return null;
 }
 $this->setupPrivKey();
 $encrypted = base64_decode($encrypted);
 $result = openssl_private_decrypt($encrypted, $decrypted, $this->_privKey);
 if ($result) {
  return $decrypted;
 }
 return null;
 }
 /**
 * 公钥加密
 * 
 */
 public function pubEncrypt($data)
 {
 if (!is_string($data)) {
  return null;
 }
 $this->setupPubKey();
 $result = openssl_public_encrypt($data, $encrypted, $this->_pubKey);
 if ($result) {
  return base64_encode($encrypted);
 }
 return null;
 }
 /**
 * 公钥解密
 * 
 */
 public function pubDecrypt($crypted)
 {
 if (!is_string($crypted)) {
  return null;
 }
 $this->setupPubKey();
 $crypted = base64_decode($crypted);
 $result = openssl_public_decrypt($crypted, $decrypted, $this->_pubKey);
 if ($result) {
  return $decrypted;
 }
 return null;
 }
 /**
 * __destruct
 * 
 */
 public function __destruct() {
 @fclose($this->_privKey);
 @fclose($this->_pubKey);
 }
}
?>

测试

$rsa = new Rsa('ssl-key');
//私钥加密,公钥解密
echo "待加密数据:segmentfault.com
";
$pre = $rsa->privEncrypt("segmentfault.com");
echo "加密后的密文:
" . $pre . "
";
$pud = $rsa->pubDecrypt($pre);
echo "解密后数据:" . $pud . "
";
//公钥加密,私钥解密
echo "待加密数据:segmentfault.com
";
$pue = $rsa->pubEncrypt("segmentfault.com");
echo "加密后的密文:
" . $pue . "
";
$prd = $rsa->privDecrypt($pue);
echo "解密后数据:" . $prd;

重要问题

这里特别要注意的是在配置中要指定openssl.cnf的文件地址,或者设置个OPENSSL_CONF全局变量就可以了。

热心网友 时间:2022-04-06 05:10

  在使用PHP开发Web应用的中,很多的应用都会要求用户注册,而注册的时候就需要我们对用户的信息进行处理了,最常见的莫过于就是邮箱和密码了,本文意在讨论对密码的处理:也就是对密码的加密处理。
  MD5
  相信很多PHP开发者在最先接触PHP的时候,处理密码的首选加密函数可能就是MD5了,我当时就是这样的:
  $password = md5($_POST["password"]);
  上面这段代码是不是很熟悉?然而MD5的加密方式目前在PHP的江湖中貌似不太受欢迎了,因为它的加密算法实在是显得有点简单了,而且很多破解密码的站点都存放了很多经过MD5加密的密码字符串,所以这里我是非常不提倡还在单单使用MD5来加密用户的密码的。
  SHA256 和 SHA512
  其实跟前面的MD5同期的还有一个SHA1加密方式的,不过也是算法比较简单,所以这里就一笔带过吧。而这里即将要说到的SHA256 和 SHA512都是来自于SHA2家族的加密函数,看名字可能你就猜的出来了,这两个加密方式分别生成256和512比特长度的hash字串。
  他们的使用方法如下:
  <?php
  $password = hash("sha256", $password);
  PHP内置了hash()函数,你只需要将加密方式传给hash()函数就好了。你可以直接指明sha256, sha512, md5, sha1等加密方式。
  盐值
  在加密的过程,我们还有一个非常常见的小伙伴:盐值。对,我们在加密的时候其实会给加密的字符串添加一个额外的字符串,以达到提高一定安全的目的:
  <?php
  function generateHashWithSalt($password) {$intermediateSalt = md5(uniqid(rand(), true));$salt = substr($intermediateSalt, 0, 6);
  return hash("sha256", $password . $salt);}
  Bcrypt
  如果让我来建议一种加密方式的话,Bcrypt可能是我给你推荐的最低要求了,因为我会强烈推荐你后面会说到的Hashing API,不过Bcrypt也不失为一种比较不错的加密方式了。
  <?php
  function generateHash($password) {
  if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {$salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);return crypt($password, $salt);
  }
  }
  Bcrypt 其实就是Blowfish和crypt()函数的结合,我们这里通过CRYPT_BLOWFISH判断Blowfish是否可用,然后像上面一样生成一个盐值,不过这里需要注意的是,crypt()的盐值必须以$2a$或者$2y$开头,详细资料可以参考下面的链接:
  http://www.php.net/security/crypt_blowfish.php更多资料可以看这里:
  http://php.net/manual/en/function.crypt.phpPassword Hashing API
  这里才是我们的重头戏,Password Hashing API是PHP 5.5之后才有的新特性,它主要是提供下面几个函数供我们使用:
  password_hash() – 对密码加密.
  password_verify() – 验证已经加密的密码,检验其hash字串是否一致.
  password_needs_rehash() – 给密码重新加密.
  password_get_info() – 返回加密算法的名称和一些相关信息.
  虽然说crypt()函数在使用上已足够,但是password_hash()不仅可以使我们的代码更加简短,而且还在安全方面给了我们更好的保障,所以,现在PHP的官方都是推荐这种方式来加密用户的密码,很多流行的框架比如Laravel就是用的这种加密方式。
  <?php
  $hash = password_hash($passwod, PASSWORD_DEFAULT);对,就是这么简单,一行代码,All done。
  PASSWORD_DEFAULT目前使用的就是Bcrypt,所以在上面我会说推荐这个,不过因为Password Hashing API做得更好了,我必须郑重地想你推荐Password Hashing API。这里需要注意的是,如果你代码使用的都是PASSWORD_DEFAULT加密方式,那么在数据库的表中,password字段就得设置超过60个字符长度,你也可以使用PASSWORD_BCRYPT,这个时候,加密后字串总是60个字符长度。
  这里使用password_hash()你完全可以不提供盐值(salt)和 消耗值 (cost),你可以将后者理解为一种性能的消耗值,cost越大,加密算法越复杂,消耗的内存也就越大。当然,如果你需要指定对应的盐值和消耗值,你可以这样写:
  <?php
  $options = [
  'salt' => custom_function_for_salt(), //write your own code to generate a suitable salt'cost' => 12 // the default cost is 10
  ];
  $hash = password_hash($password, PASSWORD_DEFAULT, $options);密码加密过后,我们需要对密码进行验证,以此来判断用户输入的密码是否正确:
  <?php
  if (password_verify($password, $hash)) {
  // Pass
  }
  else {
  // Invalid
  }
  很简单的吧,直接使用password_verify就可以对我们之前加密过的字符串(存在数据库中)进行验证了。
  然而,如果有时候我们需要更改我们的加密方式,如某一天我们突然想更换一下盐值或者提高一下消耗值,我们这时候就要使用到password_needs_rehash()函数了:
  <?php
  if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])) {// cost change to 12
  $hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);// don't forget to store the new hash!
  }
  只有这样,PHP的Password Hashing API才会知道我们重现更换了加密方式,这样的主要目的就是为了后面的密码验证。
  简单地说一下password_get_info(),这个函数一般可以看到下面三个信息:
  algo – 算法实例
  algoName – 算法名字
  options – 加密时候的可选参数
  所以,现在就开始用PHP 5.5吧,别再纠结低版本了。
  Happy Hacking

热心网友 时间:2022-04-06 06:28

付费用zend加密,一般不容易破解。不过凡事没有绝对!

热心网友 时间:2022-04-06 08:03

php加密函数比较常用的有md5、sha1和crypt这三个

热心网友 时间:2022-04-06 09:54

百度LmCjl在线工具,里面就有一个php批量加密代码的工具。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在公交车上实施扒窃,会受到怎样的处罚? 交通违法行为识别 公交车扒窃会如何处罚? 郑州鱼缸清洗找哪家公司做得比较好? 郑州有没有专业维修鱼缸,清洗鱼缸的? ...的鱼缸,放在办公室养些鱼水草之类的。郑州哪里有卖这样的鱼缸。_百... 我们公司想要定做个观赏鱼缸,不知道郑州哪家公司最专业? 谁知道郑州生态鱼缸定做哪家做的效果最好? 联想电脑启用无线功能的功能键? 笔记本电脑怎么连接网笔记本电脑怎样连接无线网 [PHP]关于mcrypt加密方法的参数 php 非对称加密 用于什么情况 php 如何正则替换数组 PHP正则匹配数字问题 php如何用正则表达式去掉数字 PHP正则表达式替换时,如何直接替换成数组值. 在线等 php 正则替换 php中 正则表达式替换问题 php正则匹配数字 php正则动态替换 php正则替换:2 9 8 8 12 15 + 8 这是一串数字(数字的个数不一定),数字间的空格数量不一定; php正则替换变量数字“str_replace”怎么用? php 正则替换数字的问题 PHP正则替换数字 php 正则替换变量数字 str_replace 怎么用 电脑快捷键大全截图 php 正则替换url参数 比如页数p=x 如何实现? php指定范围批量正则匹配与替换 PHP正则表达式如何匹配出域名? php 匹配替换 PHP中给源代码加密的几种方法 PHP代码如何加密? php实现rsa算法,该怎么处理 php 一共有几种加密方式? 请问在Php中有什么双向加密的方法?请告之方法名称及代码.谢谢 php中RSA加密,明文超长,需要分段加密该怎么做 php 非对称加密算法 可以破解吗 java加密用PHP解密 php怎么实现java接口的对称加密 php查询数组并替换字符 关于php 构建购物车里面,用到session 书上有这样一段程序 thinkphp做的session购物车,求详细代码。有完整例子的可以发下。非常感谢 请问一下php做购物车为什么要用SESSION来实现呢? ASP.NET中如何用session来实现购物车的功能? php购物车功能 结合session和数据库怎么结合求代码 php 最新的购物车session类 php购物车如何获取多个商品的id,用$_SESSION[&#39;id&#39;]=$_SESSION[&#39;id&#39;].$GET[&#39;id&#39;].&quot;@&quot;这个书上的方法。 php 类中 通过成员方法访问成员变量有什么好处,我知道是争对于安全性,但不能解释怎么个安全法, 在PHP方法(或成员函数)上除了对象可作为参数限定类型外,还有什么可作为参数限定类 PHP定义一个类,并且定义一个成员方法,该成员方法具有一个参数,传递一个数组,返回当前传递数组的倒序排序