3des加密,为什么3DES的中间部分是解密而不是加密
来源:整理 编辑:智能门户 2023-08-24 00:47:32
本文目录一览
1,为什么3DES的中间部分是解密而不是加密
3DES加密过程中的第二步使用的解密没有密码方面的意义。它的唯一好处是让3DES的使用者能够解密原来单重DES使用者加密的数据这样做的好处是当你用同样的key(即k1=k2=k3=k)带入e(k3,d(k2,e(k1,m)))时,里面两层的d和e消去,3des就会退化为一个普通的des。
2,思科K9 3DES加密算法
密码学中,3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
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位好??????如果是你编程时碰到的问题,把你的源码发来看看再说。
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加密
大家都在看
-
关闭华为自动更新,怎么彻底把wlan环境关闭?
2022-12-26
-
iphone怎样自动开机设置时间设置时间
2022-12-30
-
windows7怎样自动关机,电脑怎么办?
2023-01-25
-
手机自动待机怎么恢复,电池电量低手机万一自动关机怎么办?
2023-01-31
-
iphone自动关机黑屏,iphone自动黑屏怎么办?
2023-02-05
-
自动喷墨纹身机,如何避免针管与皮肤接触产生喷墨?
2023-02-26
-
新浪微博怎么取消自动关注,让红包飞活动取消新浪微博自动关注
2023-02-28
-
科技智能工厂宣传稿怎么写,急请教电子公司宣传语
2023-03-01
-
华为p7如何自动接电话,如何安装和使用电信电视?一文看懂
2023-03-01
-
富宇智能科技怎么样,富宇智能锁产品怎么样性价比高不高
2023-03-07
-
iwatch关闭自动语音,苹果手机应用怎么用?
2023-03-16
-
车载蓝牙自动播放音乐,蓝牙连接设备上-1蓝牙享受三大优点
2023-03-20
-
手机到30%自动关机,手机频繁重启如何检测及恢复最新状态
2023-03-26
-
学王智能科技平板怎么样,9学王平板电脑界面中没有机器人怎样办
2023-04-13
-
三星i619自动充电,手机出现故障充电请用三星手机进行检测
2023-04-26