zoukankan      html  css  js  c++  java
  • Java & PHP 3DES 互通加密、解密

    3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。

    3DES又称Triple DES,是DES加密算法的一种模式,它使用2条不同的56位的密钥对数据进行三次加密。

    数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年被ANSI组织规范为ANSI X.3.92。

    DES使用56位密钥和密码块的方法,而在密码块的方法中,文本被分成64位大小的文本块然后再进行加密。比起最初的DES,3DES更为安全。

    3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),加密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密文,这样:

    • 3DES加密过程为:C=Ek3(Dk2(Ek1(P)))

    • 3DES解密过程为:P=Dk1(EK2(Dk3(C)))

    版本

    语言 版本
    PHP 7.3.11
    Java 1.8.0_231

    加密

    PHP

    CryptUtil.encrypt

    public static function encrypt($data, $key)
    {
      $strPadded = $data;
      if (strlen($strPadded) % 8) {
        $strPadded = str_pad($strPadded,strlen($strPadded) + 8 - strlen($strPadded) % 8, "");
      }
      $key = self::getKey($key);
      $encData = openssl_encrypt($strPadded, self::CIPHER_ALGO, $key, self::OPTIONS, self::IV);
      return base64_encode($encData);
    }
    

    Java

    CryptUtil.encryptBy3DesAndBase64

    public static String encryptBy3DesAndBase64(String content, String keyStr, String encoding) throws Exception {
      byte output[] = null;
      byte input[] = null;
      int residue = (content.getBytes(encoding).length) % 8;
      if (0 != residue) {
        int padLen = 8 - residue;
        StringBuffer strBuf = new StringBuffer(content);
        for (int i = 0; i < padLen; i++) {
          strBuf.append(' ');
        }
        input = (new String(strBuf)).getBytes(encoding);
      } else {
        input = content.getBytes(encoding);
      }
      output = encryptBy3Des(input, keyStr);
      return Base64.encode(output).replaceAll("[\n\r]", "");
    }
    

    解密

    PHP

    CryptUtil.decrypt

    public static function decrypt($data, $key)
    {
      $key     = self::getKey($key);
      $data    = base64_decode($data);
      $decData = openssl_decrypt($data, self::CIPHER_ALGO, $key, self::OPTIONS, self::IV);
      return trim($decData);
    }
    

    Java

    CryptUtil.decryptBy3DesAndBase64

    public static String decryptBy3DesAndBase64(String content, String keyStr, String encoding) throws Exception {
      byte output[] = null;
      byte input[] = null;
      input = Base64.decode(content);
      output = decryptBy3Des(input, keyStr);
      String retStr = new String(output, encoding);
      return (retStr.trim());
    }
    

    Demo

    完整 Demo 源码:BNDong/demo/PhpJava3DES

  • 相关阅读:
    LR十九:Analysis 图标分析
    Llinux:mysql的安装教程
    Jmeter28:linux下实现压测-html报表生成-控制台参数优化
    Llinux:自动分配ip的方法
    Llinux:环境变量的配置-java-JMETER
    if _ else if _ else,case,程序逻辑判断- java基础
    LR十八:Controller组件- 集合点的功能-loadrunner
    LR十七:Controller
    Jmeter27:TCP_协议_socket接口
    LR十六:socket_tcp协议_loadrunner测试
  • 原文地址:https://www.cnblogs.com/bndong/p/15203080.html
Copyright © 2011-2022 走看看