首页 > 厂商 > 经验 > 3DES,为什么3des的中间部分采用了解密而不是加密

3DES,为什么3des的中间部分采用了解密而不是加密

来源:整理 时间:2023-08-15 05:36:22 编辑:智能门户 手机版

本文目录一览

1,为什么3des的中间部分采用了解密而不是加密

这样做的好处是当你用同样的key(即k1=k2=k3=k)带入E(k3,D(k2,E(k1,m)))时,里面两层的D和E消去,3DES就会退化为一个普通的DES。

为什么3des的中间部分采用了解密而不是加密

2,到底什么是3倍DES

就是价钱贵三倍再看看别人怎么说的。
就是3des,你可以理解为使用3个不同的密钥对每个明文数据块进行了3次des加密:3DES加密过程为:C=Ek3(Dk2(Ek1(M)))3DES解密过程为:M=Dk1(EK2(Dk3(C))E表示加密算法,D表示解密算法。

到底什么是3倍DES

3,什么是MAC 3EDS算法

MAC是在CPU卡通讯中的一种数据保护的算法方式;就是将要传松的数据通过MAC计算,产生MAC码跟在数据串后面,发送给设备,设备接收到数据后,用相同的算法验证下MAC是否正确,如果正确,就行进数据处理,否则就提示MAC码错误;3DES的MAC码计算一般是把数据分段成8字节的来进行运算,的,不足8字节的需要补齐,首先用第一个数据块和初试数据进行异或,然后用左8字节的密码进行DES加密,将结果和第二包数据异或,在用左8字节的密码加密,知道最后一包数据,然后在右8字节的密码DES解密,然后再用左8字节的密码进行DES加密得到8个字节的MAC码.
不明白啊 = =!

什么是MAC 3EDS算法

4,高分求关于java的3des加密的bug解决办法要求能用16位key并且不

在java中调用sun公司提供的3DES加密解密算法时,需要使用到$JAVA_HOME/jre/lib/目录下如下的4个jar包: jce.jar security/US_export_policy.jar security/local_policy.jar ext/sunjce_provider.jar Java运行时会自动加载这些包,因此对于带main函数的应用程序不需要设置到CLASSPATH环境变量中。对于WEB应用,不需要把这些包加到WEB-INF/lib目录下。 以下是java中调用sun公司提供的3DES加密解密算法的样本代码: 加密解密代码 import java.security.Security; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; /*字符串 DESede(3DES) 加密*/ 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))); } }
你好!代码发出来希望对你有所帮助,望采纳。

5,如何用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的中间部分采用了解密而不是加密

最近更新

  • 电容充电,电容是怎样进行充电的电容充电,电容是怎样进行充电的

    电容是怎样进行充电的2,关于复杂电路电容充电3,大电容是怎样充电的4,电容器的充放电的过程怎样的5,问一个关于电容充电原理的问题6,请微观解释电容器充电过程1,电容是怎样进行充电的电容的两.....

    经验 日期:2023-08-15

  • 蜂窝数据apn在哪蜂窝数据apn在哪

    ...APNin蜂窝数据如何设置用户名和密码?在哪里注册?普网蜂窝-2/网内第一个apn进入cmnet,退出。如何在iphone上设置apn?蜂窝数据APN是什么?蜂窝手机数据APN是:cmnet1,首先用户要进入设置选项,.....

    经验 日期:2023-08-15

  • 行业分析 大数据行业,目前外贸行业的行业分析行业分析 大数据行业,目前外贸行业的行业分析

    大数据分析行业前景如何?有哪些半导体行业数据分析?2.-1分析division-1分析division是数据division的一种,指不同的行业,专攻行业。大数据行业发展如何?Big数据行业就业三大方向及十大职业.....

    经验 日期:2023-08-15

  • 魅族5s数据连接不上去魅族5s数据连接不上去

    连接否?为什么魅族针对手机数据Line连接电脑、魅族仅手机显示-3连接怎么回事?魅族否连接移动网络,魅蓝5s如何连接电脑连接电脑连接如何做网络1。魅族手机上网怎么用电脑网络都可以,设置方.....

    经验 日期:2023-08-15

  • 备备手机数据备份器,小米手机数据备份到电脑备备手机数据备份器,小米手机数据备份到电脑

    如何制作手机全部内容备份如果使用vivo手机,可以使用云服务备份。具体方法如下:1,进入“云服务”APP设备云备份数据选型需求备份-3/立即返回上一页/,打开“自动云备份”每7天备份-3/当设.....

    经验 日期:2023-08-15

  • 芒果tv自动关机芒果tv自动关机

    6.找到芒果TV的右下角并勾选,然后点击“一键停止”关闭芒果tvStart自动Start。芒果tv如何定期关闭?芒果tvBoot自动如何关闭开机芒果如何取消电视的开机自动运行应用:thinkpadE480windows.....

    经验 日期:2023-08-15

  • 金立数据报告,金立手机怎么清除数据金立数据报告,金立手机怎么清除数据

    金立手机m6splus显示联系人停止运行时发生了什么。可以点击“发送错误报告”,或者点击“发送错误报告”,然后备份手机联系人,打开设置→高级设置→全部→通讯录→清除,你点击发送错误报告.....

    经验 日期:2023-08-15

  • gita 机器人 结构gita 机器人 结构

    业机器人按机械结构可分为串联机器人和并联机器人。机器人联驱结构什么事?1)自重小:提高机器人运行的动态性能;行业构成机器人结构?美国Atlas机器人美国Atlas机器人Atlas机器人(Atlasrobo.....

    经验 日期:2023-08-15