本文目录一览

1,为什么3DES的中间部分是解密而不是加密

3DES加密过程中的第二步使用的解密没有密码方面的意义。它的唯一好处是让3DES的使用者能够解密原来单重DES使用者加密的数据
这样做的好处是当你用同样的key(即k1=k2=k3=k)带入e(k3,d(k2,e(k1,m)))时,里面两层的d和e消去,3des就会退化为一个普通的des。

为什么3DES的中间部分是解密而不是加密

2,思科K9 3DES加密算法

密码学中,3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

思科K9 3DES加密算法

3,3DES 加密解密

这个我不清楚。给电脑上的文件加密或者文件夹加密,你可以使用超级加密3000。超级加密3000采用国际上成熟的加密算法和安全快速的加密方法,可以有效保障数据安全!具体操作方法:1下载安装超级加密3000。2 然后在需要加密的文件上单击鼠标右键选择加密。3 在弹出的文件加密窗口中设置文件加密密码就OK了。超级加密3000的下载地址你可以在百度上搜索超级加密3000,第一个就是。
des的密钥是8个字节,但实际上只有7个用上,也就是56位。3des是用3个或2个des密钥加密一串明文,最少112位最多168位。也就是14~21个字母或数字符号。从安全性上来说密钥位数不足是不能加密的,但有些软件为了保证用户可用,会自动使用某种策略自动填充满,一般是重复填充或采用特定字符,如果你只填了1234作为密钥,有可能真正用于加密的密钥是123412341234123412341或者123400000000000000000类似的。另外请注意,最好去做3des的密钥位数不是7或8,因为des的加密解密是同一个过程,这样搞在填充后实际上是只使用了一次des加密??????还不如5位6位好??????如果是你编程时碰到的问题,把你的源码发来看看再说。

3DES 加密解密

4,如何用Java进行3DES加密解

public static String encryptKey(String mainKey,String plainKey){ String encryptKey = ""; try{ Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); String Algorithm = "DESede/ECB/NoPadding"; byte[] hb = hex2byte(mainKey.getBytes()); byte[] k = new byte[24]; System.arraycopy(hb,0,k,0,16); System.arraycopy(hb,0,k,16,8); SecretKey deskey = new SecretKeySpec(k, Algorithm); Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.ENCRYPT_MODE, deskey); encryptKey = byte2hex(c1.doFinal(hex2byte(plainKey.getBytes()))); }catch(Exception e){ e.printStackTrace(); } return encryptKey; }public static String byte2hex(byte[] b) { String hs = ""; String stmp = ""; for (int n = 0; n < b.length; n++) { stmp = Integer.toHexString(b[n] & 0xFF); if (stmp.length() == 1) hs += ("0" + stmp); else hs += stmp; } return hs.toUpperCase(); } 3DES的加密密钥长度要求是24个字节,本例中因为给定的密钥只有16个字节,所以需要填补至24个字节。

5,求c 具体的 3des双倍加密算法 跪求

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Security.Cryptography; namespace Rare.Card.Libary.Security { /// <summary> /// 构造一个对称算法,使用3Des加密 ///如果当前的 Key 属性为 NULL,可调用 GenerateKey 方法以创建新的随机 Key。 ///如果当前的 IV 属性为 NULL,可调用 GenerateIV 方法以创建新的随机 IV /// </summary> public class CryptoTripleDes { //加密矢量 private static byte[] IV = { 0xB0, 0xA2, 0xB8, 0xA3, 0xDA, 0xCC, 0xDA, 0xCC }; /// <summary> /// 使用指定的128字节的密钥对8字节数组进行3Des加密 /// </summary> /// <param name="keys">密钥,16字节,128位</param> /// <param name="values">要加密的数组</param> /// <returns>已加密的数组</returns> public static byte[] CreateEncryptByte(byte[] keys, byte[] values) { TripleDESCryptoServiceProvider tdsc = new TripleDESCryptoServiceProvider(); //指定密匙长度,默认为192位 tdsc.KeySize = 128; //使用指定的key和IV(加密向量) tdsc.Key = keys; tdsc.IV = IV; //加密模式,偏移 tdsc.Mode = CipherMode.ECB; tdsc.Padding = PaddingMode.None; //进行加密转换运算 ICryptoTransform ct = tdsc.CreateEncryptor(); //8很关键,加密结果是8字节数组 byte[] results = ct.TransformFinalBlock(values, 0, 8); return results; } /// <summary> /// 使用指定的128字节的密钥对字符串(8位)进行3Des加密 /// </summary> /// <param name="strKey"></param> /// <param name="strValue"></param> /// <returns></returns> public static byte[] CreateEncryptString(string strKey, string strValue) { TripleDESCryptoServiceProvider tdsc = new TripleDESCryptoServiceProvider(); byte[] results = new byte[strValue.Length]; tdsc.KeySize = 128; if (!string.IsNullOrEmpty(strKey)) { tdsc.Key = Encoding.UTF8.GetBytes(strKey); } tdsc.IV = IV; using (ICryptoTransform ct = tdsc.CreateDecryptor()) { byte[] byt = Encoding.UTF8.GetBytes(strValue); results = ct.TransformFinalBlock(byt, 0, 8); } return results; } /// <summary> /// 对加密字符串进行解密 /// </summary> /// <param name="keys">密匙</param> /// <param name="values">已加密字符串</param> /// <returns>解密结果</returns> public static byte[] CreateDescryptByte(byte[] keys, byte[] values) { TripleDESCryptoServiceProvider tdsc = new TripleDESCryptoServiceProvider(); //指定密匙长度,默认为192位 tdsc.KeySize = 128; //使用指定的key和IV(加密向量) tdsc.Key = keys; tdsc.IV = IV; //加密模式,偏移 tdsc.Mode = CipherMode.ECB; tdsc.Padding = PaddingMode.None; //进行加密转换运算 ICryptoTransform ct = tdsc.CreateDecryptor(); //8很关键,加密结果是8字节数组 byte[] results = ct.TransformFinalBlock(values, 0, 8); return results; } } }

6,如何用Java进行3DES加密解密

这里是例子,直接拿来用就可以了。package com.nnff.des; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; /*字符串 DESede(3DES) 加密 * ECB模式/使用PKCS7方式填充不足位,目前给的密钥是192位 * 3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的 * 加密标准),是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加 * 密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的 * 密钥,P代表明文,C代表密表,这样, * 3DES加密过程为:C=Ek3(Dk2(Ek1(P))) * 3DES解密过程为:P=Dk1((EK2(Dk3(C))) * */ public class ThreeDes /** * @param args在java中调用sun公司提供的3DES加密解密算法时,需要使 * 用到$JAVA_HOME/jre/lib/目录下如下的4个jar包: *jce.jar *security/US_export_policy.jar *security/local_policy.jar *ext/sunjce_provider.jar */ private static final String Algorithm = "DESede"; //定义加密算法,可用 DES,DESede,Blowfish //keybyte为加密密钥,长度为24字节 //src为被加密的数据缓冲区(源) public static byte[] encryptMode(byte[] keybyte,byte[] src) try //生成密钥 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); //加密 Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.ENCRYPT_MODE, deskey); return c1.doFinal(src);//在单一方面的加密或解密 } catch (java.security.NoSuchAlgorithmException e1) // TODO: handle exception e1.printStackTrace(); }catch(javax.crypto.NoSuchPaddingException e2) e2.printStackTrace(); }catch(java.lang.Exception e3) e3.printStackTrace(); } return null; } //keybyte为加密密钥,长度为24字节 //src为加密后的缓冲区 public static byte[] decryptMode(byte[] keybyte,byte[] src) try //生成密钥 SecretKey deskey = new SecretKeySpec(keybyte, Algorithm); //解密 Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.DECRYPT_MODE, deskey); return c1.doFinal(src); } catch (java.security.NoSuchAlgorithmException e1) // TODO: handle exception e1.printStackTrace(); }catch(javax.crypto.NoSuchPaddingException e2) e2.printStackTrace(); }catch(java.lang.Exception e3) e3.printStackTrace(); } return null; } //转换成十六进制字符串 public static String byte2Hex(byte[] b) String hs=""; String stmp=""; for(int n=0; nstmp = (java.lang.Integer.toHexString(b[n]& 0XFF)); if(stmp.length()==1){ hs = hs + "0" + stmp; }else{ hs = hs + stmp; } if(n } return hs.toUpperCase(); } public static void main(String[] args) { // TODO Auto-generated method stub //添加新安全算法,如果用JCE就要把它添加进去 Security.addProvider(new com.sun.crypto.provider.SunJCE()); final byte[] keyBytes = {0x11, 0x22, 0x4F, 0x58, (byte)0x88, 0x10, 0x40, 0x38, 0x28, 0x25, 0x79, 0x51, (byte)0xCB, (byte)0xDD, 0x55, 0x66, 0x77, 0x29, 0x74, (byte)0x98, 0x30, 0x40, 0x36, (byte)0xE2 }; //24字节的密钥 String szSrc = "This is a 3DES test. 测试"; System.out.println("加密前的字符串:" + szSrc); byte[] encoded = encryptMode(keyBytes,szSrc.getBytes()); System.out.println("加密后的字符串:" + new String(encoded)); byte[] srcBytes = decryptMode(keyBytes,encoded); System.out.println("解密后的字符串:" + (new String(srcBytes))); } }
public static string encryptkey(string mainkey,string plainkey){ string encryptkey = ""; try{ security.addprovider(new org.bouncycastle.jce.provider.bouncycastleprovider()); string algorithm = "desede/ecb/nopadding"; byte[] hb = hex2byte(mainkey.getbytes()); byte[] k = new byte[24]; system.arraycopy(hb,0,k,0,16); system.arraycopy(hb,0,k,16,8); secretkey deskey = new secretkeyspec(k, algorithm); cipher c1 = cipher.getinstance(algorithm); c1.init(cipher.encrypt_mode, deskey); encryptkey = byte2hex(c1.dofinal(hex2byte(plainkey.getbytes()))); }catch(exception e){ e.printstacktrace(); } return encryptkey; }public static string byte2hex(byte[] b) { string hs = ""; string stmp = ""; for (int n = 0; n < b.length; n++) { stmp = integer.tohexstring(b[n] & 0xff); if (stmp.length() == 1) hs += ("0" + stmp); else hs += stmp; } return hs.touppercase(); } 3des的加密密钥长度要求是24个字节,本例中因为给定的密钥只有16个字节,所以需要填补至24个字节。

文章TAG:3des  加密  为什么  什么  3des加密  
没有了