php 中用 mcrypt 加密后的数据 不知道密钥,能暴力破解吗?

Jiazz 发布于 2013/10/07 20:45
阅读 1K+
收藏 3
是不是密钥越长越安全???
加载中
0
kenping
kenping
MD5/SHA这样的单向加密,几乎不可能,如果你知道大致密码,倒是可以穷举尝试一下
lingxi27
lingxi27
回复 @ljz : 理论从来没有否认过“只要机器够暴力,只是时间问题”,耐心去学习下理论,没有坏处的
Jiazz
Jiazz
回复 @李晓宇1983 : ......理论和现实~我更相信现实~~~现实是MD5被逆了·~~~a转成MD5是固定~~AA转成MD5是固定~~~所以~只要机器够暴力 都是时间问题
lingxi27
lingxi27
回复 @ljz : 推荐你看看这个http://bbs.csdn.net/topics/380167377
Jiazz
Jiazz
回复 @我喜欢吴佳旻 : 大哥们~~我需要一个PHP双向加密解密的方法~~重点要现在没办法破解的~单向加密的数据对我来说没意义~~~~~单向加密的 SHA512我觉得够了
帖子列表
帖子列表
md5+salt很难“破”吧
下一页
0
南湖船老大
南湖船老大

首先mcrypt是PHP里的一个通用模块,里面有N种密码学算法可以选择(N>40),你只说个mcrypt,鬼知道你在说啥啊。可能是用的MD5,SHA,CRYPT,BLOWFISH也可能是DES,AES,GOST,RC4。。。

密码学常识要补习啊,什么散列算法,对称加密,非对称加密,首先名词要说对。

要“双向加密”,就选使用最广泛的3DES啊,或者更简单的XXTEA,threefish,RC5等,安全性都很高。

<?php

/*
 * @Author:XXX
 * @Date: 2013-10-06 14:53:04
 * @Desc: 3des算法来源于网络
 */

class triDES {

    //3DES密钥
    public $key;
    //3DES向量
    public $iv;

    public function __construct() {
        if (!extension_loaded('mcrypt')) {
            exit('请安装并加载mcrypt扩展!');
        }
    }

    public function DESEncrypt($data) {
        return base64_encode($this->encode($data)); //加密     
    }

    public function DESDecrypt($data) {
        return $this->decode(base64_decode($data)); //解密        
    }

    public function encode($text) {
        return $this->encrypt($this->key, $this->iv, $text);
    }

    public function decode($text) {
        return $this->decrypt($this->key, $this->iv, $text);
    }

    public function encrypt($key, $iv, $text) {
        $key_add = 24 - strlen($key);
        $key .= substr($key, 0, $key_add);
        $text = $this->pad($text);
        $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
        mcrypt_generic_init($td, $key, $iv);
        $encrypt_text = mcrypt_generic($td, $text);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);

        return $encrypt_text;
    }

    public function decrypt($key, $iv, $text) {
        $key_add = 24 - strlen($key);
        $key .= substr($key, 0, $key_add);
        $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
        mcrypt_generic_init($td, $key, $iv);
        $text = mdecrypt_generic($td, $text);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);

        return $this->unpad($text);
    }

    public function pad($text) {
        $text_add = strlen($text) % 8;
        for ($i = $text_add; $i < 8; $i++) {
            $text .= chr(8 - $text_add);
        }

        return $text;
    }

    public function unpad($text) {
        $pad = ord($text{strlen($text) - 1});
        if ($pad > strlen($text)) {
            return false;
        }
        if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
            return false;
        }

        return substr($text, 0, -1 * $pad);
    }

}

?>


Jiazz
Jiazz
回复 @南湖船老大 : 哎~新闻看多了~啥GPU破解~~据说很快...毕竟加密后的字符串是公开的~所以担心这个问题
南湖船老大
南湖船老大
回复 @ljz : 非绝顶高手很难破解,你想多了
Jiazz
Jiazz
[密码学介绍].Intro.To.Crypto.Jon.Callas.英文版.pdf~~~有更好的推荐吗?
Jiazz
Jiazz
....还有个疑问~~SHA 和 MD5 php 不是靠Mhash实现的吗?呃~我用的是Mhash实现的SHA512加密~目前用在密码“消息摘”上
Jiazz
Jiazz
我现在使用mcrypt_encrypt和mcrypt_decrypt实现的~~呃,现成的函数,支持:cast-128\gost\rijndael-128\twofish\arcfour\cast-256\loki97\rijndael-192\saferplus等等,但没有3DES和AES~~这~~你这个3DES是自己扩展的算法?
下一页
0
PYPlus
PYPlus
     楼主我看你理解错了吧, mcrypt是否安全要看所使用的加密算法,我百度了下mcrypt函数,既然支持20多种加密算法,那你就选择比较安全的加密算法不就得了,
    还有不是说你输入的key越长越好.从暴力破解角度来看.得看这个密码算法的密钥空间是否足够大.足够大才不易被穷举.同时使用的密钥不要太简单否则可能被字典攻击.
    说到加密它当然是双向的,不能解密哪来的加密这说法?有对称和非对称加密说法没有双向加密说法吧?
md5 sha256这是哈希算法,哈希函数是密码学的一个分支 但它不是加密算法.它所计算出来的是消息摘要不是密文.
估计你的意思是要一种对称密码算法吧,我觉得AES算法你可以试试
vmbncm
vmbncm
回复 @ljz :
Jiazz
Jiazz
求AES的例子~~~AES目前来说够安全啊~
Jiazz
Jiazz
目前的MD5是可以把称之为“消息摘”变成MD5前的字符串~~呃~~~这个~~~~~~~是暴力破解吧?(不知道用词对不对)~~~~复杂度高的KEY花的时间会多点吧(虽然都是时间问题)
Jiazz
Jiazz
至于~~单向 还是哈希~~这个~~~其实 说法都是正确的吧~~~至少我看的很多资料都是这么些的~~~我是没系统的学习过这些~~所以 最最标准的老师说的术语我没掌握啦~~~~还有就是~~~是不是我的环境配置有问题~~~用MCRYPT使用AES一堆的Warning
Jiazz
Jiazz
知道啊~~因为现在很多算法基本都被攻破了~~~里面有些算法没啥用处~~来问问题之前都查了很多资料了 呃
0
Jiazz
Jiazz
自己解决了~感觉各位老大了~~~花了不少时间...
0
自主创新
自主创新
3des,不过要支持证书才行
自主创新
自主创新
回复 @ljz : 反正对称加密要非对称加密来传输密钥,不然跟不加密有什么区别
Jiazz
Jiazz
3DES还有证书啥的?呃~我是没找到示例~~你说的是RSA吧~~非对称加密和3DES(对称加密)不一样吧~~~自己配置的环境中openssl 就用RSA 2048Bit~感觉是挺安全的 哈哈
0
自主创新
自主创新
不过我说错了,不是证书,是客户端
自主创新
自主创新
回复 @ljz : 被解密那是强度不够,购买的绝对都是安全的, 你的情况不想明文传输也没办法,因为sha md5不可逆
Jiazz
Jiazz
回复 @自主创新 : HTTPS大部分是用RAS算法~前段时间爆出的新闻是1024bit以下的被X了~~1024bit估计这几年也差不多~~~HTTPS我自己生成的是RAS2048的~~~现在我要解决的是~我买的虚拟主机不支持HTTPS~~我又想和本地的系统交换数据,数据不加密就是明文传输....
Jiazz
Jiazz
回复 @自主创新 : 这些里说的工具也包括JS、PHP、java、asp.NET之类的语言吗?因为他们都可以实现~~~~
Jiazz
Jiazz
回复 @自主创新 : ....你先去了解下啥是SSL~就知道为什么支付宝有证书了~~~你自己也可以用OPENSSL生成自己的私有根证书在授权给别人~~~~~POST GET 已经很强大了 不简单~~~~HTTPS 基于SSL~~~你去看看SSL的新闻吧~前段时间就爆出个漏洞~~~~~我感觉你还没吧HTTPS是啥东西搞清楚吧~~~~~
自主创新
自主创新
回复 @ljz : 工具是来做这些工作的,内置/传输密钥的,HTML出了展示之外就只有POST和get之类的简单功能,你看看支付宝,财付通为什么要装插件不就是因为密钥要工具来做的么 不过话说回来,其实https已经很安全了没必要纠结这些东西,paypal就一个https,几乎没听到过什么被盗号之类的
下一页
返回顶部
顶部