wqy
2020-03-26 12:05:31
2819

简介

RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制 。
在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK 。
正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要 。
RSA是被研究得最广泛的公钥算法,从提出到现在已近三十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。1983年麻省理工学院在美国为RSA算法申请了专利 。
 
RSA允许你选择公钥的大小。512位的密钥被视为不安全的;768位的密钥不用担心受到除了国家安全管理(NSA)外的其他事物的危害;1024位的密钥几乎是安全的。RSA在一些主要产品内部都有嵌入,像 Windows、网景 Navigator、 Quicken和 Lotus Notes
 

算法原理

RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥  。
 
 
 
1 加密
 /**
     * aes加密
     * @param $data string 加密的数据
     * @param $key
     * @param $iv string 非 NULL 的初始化向量。长度16位
     * @param string $method 加密方式
     * @return false|string
     */
    public static function aesEncrypt($data,$key,$iv,$method = 'aes-128-cbc'){
        $data = base64_encode($data);
        $result  =  openssl_encrypt($data,$method,$key,OPENSSL_RAW_DATA,$iv);
        return base64_encode($result);
    }

 

2 解密



    /**
     * aes解密数据
     * @param $data
     */
    public static function aesDecrypt($data,$key,$iv,$method = 'aes-128-cbc'){
        $data = base64_decode($data);
        $result = openssl_decrypt($data,$method,$key,OPENSSL_RAW_DATA,$iv);
        $result = base64_decode($result);
        return $result;
    }