【问题标题】:Is 3DES = DES do 3 times?是 3DES = DES 做 3 次吗?
【发布时间】:2013-11-06 11:35:40
【问题描述】:

我根据mkyong's JCE Encryption – Data Encryption Standard (DES) Tutorial做了一个DES Util类

这是我的课:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

import tw.com.januarytc.android.singularsdk.lib.JsLib;
import android.util.Log;

public class DESUtil
{
  private KeyGenerator keyGen=null;
  private SecretKey sKey=null;
  private Cipher desCip=null;

  /**
   * Init. DES utility class
   * @return boolean
   */
  public boolean init()
  {
    boolean b=false;

    try
    {
      keyGen=KeyGenerator.getInstance("DES");
      sKey=keyGen.generateKey();
      desCip=Cipher.getInstance("DES/ECB/PKCS5Padding");
      b=true;
    }
    catch(Exception e)
    {
      Log.d(JsLib.TAG, "Init DESUtil failed: "+e.toString());
      e.printStackTrace();
      b=false;
    }
    return b;
  }

  /**
   * Encrypt string with DES
   * @param str - Original string
   * @return java.lang.String DES encrypted string
   * @throws IllegalStateException
   */
  public String encryptString(String str) throws IllegalStateException
  {
    if(keyGen==null || sKey==null || desCip==null){throw new IllegalStateException("DESUtil class has not been initialized.");}
    String ret="";
    try
    {
      desCip.init(Cipher.ENCRYPT_MODE, sKey);
      ret=new String(desCip.doFinal(str.getBytes("UTF-8")));
    }
    catch(Exception e)
    {
      e.printStackTrace();
      ret="";
    }
    return ret;
  }

  /**
   * Decrypt string which encrypted by DES
   * @param str - DES encrypted string
   * @return java.lang.String Original string
   * @throws IllegalStateException
   */
  public String decryptString(String strDes) throws IllegalStateException
  {
    if(keyGen==null || sKey==null || desCip==null){throw new IllegalStateException("DESUtil class has not been initialized.");}
    String ret="";
    try
    {
      desCip.init(Cipher.DECRYPT_MODE, sKey);
      ret=new String(desCip.doFinal(strDes.getBytes("UTF-8")));
    }
    catch(Exception e)
    {
      e.printStackTrace();
      ret="";
    }
    return ret;
  }
}

正如维基所说:

在密码学中,三重 DES 是三重数据加密算法(TDEA 或三重 DEA)块密码的通用名称,它对每个数据块应用三次数据加密标准 (DES) 密码算法 >.

我只是想知道如果我用 DES 加密一个字符串 3 次会怎样...会等于 3DES 吗?

谢谢你的建议,对不起我的英语不好~

【问题讨论】:

    标签: java android des 3des


    【解决方案1】:

    DES 使用较短的 56 位密钥,容易受到暴力攻击。 3DES 使用 168 位密钥 (56x3),并像这样执行加密:

    1. 使用密钥的前 56 位加密明文,产生输出 1
    2. 解密 output1 使用密钥的第二个 56 位,产生 output2
    3. 使用它们的第 3 个 56 位加密 output2,生成加密文本。

    她是一个参考: http://en.wikipedia.org/wiki/Triple_DES

    【讨论】:

    • 3DES 实际上是以这种方式设计的,以向后兼容单个 DES。使用 3DES 密钥加密的所有三个 56 位部分都相同的数据,将提供与使用单个 56 位 DES 密钥加密的数据相同的结果。这样一来,所有单个 DES 加密数据也可以通过 3DES 实现访问。
    【解决方案2】:

    3DES 确实执行了 3 次 DES,但使用了三个不同的键。该算法旨在解决 DES 与原始密钥大小相关的固有安全性不足问题。

    【讨论】:

      猜你喜欢
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 2015-12-29
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      相关资源
      最近更新 更多