web开发之密码学

古典密码学

方法:替换法,移位法

案例:凯撒密码

近代密码学

方法:替换法,移位法

替换法:单表替换和多表替换

案例:凯撒密码

破解:概率分析法

现代密码学

  • 散列函数

    MD5,SHA-1,SHA-256,SHA-512
    md5('111')是消息摘要
  • 对称加密
  1. DES
    $key = '12345678';
    $iv = '12345678';
    //加解密算法/工作模式/填充方式
    //DES/[CBC|ECB]
    //加密 OPENSSL_ZERO_PADDING //8位
    $content = '你好啊!小米12';
    $cipher = 'DES-CBC';
    $ivlength = openssl_cipher_iv_length($cipher);
    //echo openssl_cipher_iv_length($cipher);
    $res1 = openssl_random_pseudo_bytes($ivlength);
    $encryptStr = openssl_encrypt($content, $cipher, $key, OPENSSL_RAW_DATA, $iv);
    echo 'DES-CBC加密:'.base64_encode($encryptStr).'<br>';
    
    $decryptStr = openssl_decrypt($encryptStr, $cipher, $key, OPENSSL_RAW_DATA, $iv);
    echo 'DES-CBC解密:'.$decryptStr.'<br>';
    
    $cipher = 'DES-ECB';
    $encryptStr = openssl_encrypt($content, $cipher, $key, OPENSSL_RAW_DATA);
    echo 'DES-ECB加密:'.base64_encode($encryptStr).'<br>';
    
    $decryptStr = openssl_decrypt($encryptStr, $cipher, $key, OPENSSL_RAW_DATA);
    echo 'DES-ECB解密:'.$decryptStr.'<br>';
  2. AES
    $key = '123456';
    $iv = '0102030405060708'; //16位
    //加解密算法/工作模式/填充方式
    //DES/[CBC|ECB]
    //加密 OPENSSL_ZERO_PADDING
    $content = 's123456';
    $cipher = 'AES-128-CBC';
    $ivlength = openssl_cipher_iv_length($cipher);
    //echo openssl_cipher_iv_length($cipher);
    $res1 = openssl_random_pseudo_bytes($ivlength);
    $encryptStr = openssl_encrypt($content, $cipher, $key, OPENSSL_RAW_DATA, $iv);
     echo 'DES-CBC加密:'.base64_encode($encryptStr).'<br>';
    
    $decryptStr = openssl_decrypt($encryptStr, $cipher, $key, OPENSSL_RAW_DATA, $iv);
    echo 'DES-CBC解密:'.$decryptStr.'<br>';
    
    $cipher = 'AES-128-ECB';
    $encryptStr = openssl_encrypt($content, $cipher, $key, OPENSSL_RAW_DATA);
    echo 'DES-ECB加密:'.base64_encode($encryptStr).'<br>';
    
    $decryptStr = openssl_decrypt($encryptStr, $cipher, $key, OPENSSL_RAW_DATA);
    echo 'DES-ECB解密:'.$decryptStr.'<br>';
  • 非对称加密
  1. RSA
    //RSA-private加密
    $content = '你好啊!';
    $filename = 'rsa_private.pem';
    $fp = fopen($filename, 'r+');
    $priKey = fread($fp, filesize($filename));
    fclose($fp);
    $res = openssl_pkey_get_private($priKey);
    openssl_private_encrypt($content, $encryptPri, $res, OPENSSL_PKCS1_PADDING);
    echo 'RSA-private加密:'.base64_encode($encryptPri);
    echo '<br>';
    //RSA-public解密
    $filename = 'rsa_public.txt';
    $fp = fopen($filename, 'r+');
    $pbuKey = fread($fp, filesize($filename));
    fclose($fp);
    openssl_public_decrypt($encryptPri, $decryptPbu, $pbuKey, OPENSSL_PKCS1_PADDING);
    echo 'RSA-public解密:'.$decryptPbu;
    echo '<br>';
    
    //RSA-public加密
    openssl_public_encrypt($content, $encryPbu, $pbuKey, OPENSSL_PKCS1_PADDING);
    echo 'RSA-public加密:'.base64_encode($encryPbu);
    echo '<br>';
    
    //RSA-private解密
    openssl_private_decrypt($encryPbu, $descryPri, $priKey, OPENSSL_PKCS1_PADDING);
    echo 'RSA-private加密:'.$descryPri;
    

备注

  1. 数字签名(又称公钥数字签名):是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
  2. HTTPS原理:

 

  • 14
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值