3DES,即三重DES,是DES的加强版,也是DES的一个更安全的变形。它使用3个56位(共168位)的密钥对数据进行三次加密,和DES相比,安全性得到了较大的提高。

实际上,3DES是一个过渡的加密算法。1999年,NIST将3-DES指定为DES向AES过渡的加密标准。

3DES以DES为基本模块,通过组合分组方法设计出分组加密算法。若三个密钥互不相同,本质上就相当于用一个长为168位的密钥进行加密,大大加强了数据的安全性。

若数据对安全性要求不高,可以让其中的两个密钥相等,这样,密钥的有效长度也有112位。

在Java的加密体系中,使用3DES非常简单,程序结构和使用DES时相同,只不过在初始化时将算法名称由"DES"改为"DESede"即可。

下列程序基本原理和P12_01相同,只不过将加密和解密过程写在一起。

import java.security.Security;

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

public class P12_02   {

public static void main(String[] args) throws Exception  {

//KeyGenerator提供对称密钥生成器的功能,支持各种算法

KeyGenerator keygen;

//SecretKey负责保存对称密钥

SecretKey deskey;

//Cipher负责完成加密或解密工作

Cipher c;

Security.addProvider(new com.sun.crypto.provider.SunJCE());

//实例化支持3DES算法的密钥生成器,算法名称用DESede

keygen = KeyGenerator.getInstance("DESede");

//生成密钥

deskey = keygen.generateKey();

//生成Cipher对象,指定其支持3DES算法

c = Cipher.getInstance("DESede");

String msg = "郭克华_安全编程技术";

System.out.println("明文是:" + msg);

//根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式

c.init(Cipher.ENCRYPT_MODE, deskey);

byte[] src = msg.getBytes();

//加密,结果保存进enc

byte[] enc = c.doFinal(src);

System.out.println("密文是:" + new String(enc));

//根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式

c.init(Cipher.DECRYPT_MODE, deskey);

//解密,结果保存进dec

byte[] dec = c.doFinal(enc);

System.out.println("解密后的结果是:"+ new String(dec));

}

}

用Java实现3DES的更多相关文章

  1. Java中3DES加密解密与其他语言(如C/C++)通信

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  2. 如何用Java进行3DES加密解

    原文地址: http://weavesky.com/2008/01/05/java-3des/ 最近一个合作商提出使用3DES交换数据,本来他们有现成的代码,可惜只有.net版本,我们的服务器都是Li ...

  3. Java实现3DES加密--及ANSI X9.8 Format标准 PIN PAN获取PIN BlOCK

    1, 采用银联ANSI X9.8标准 PIN xor PAN获取PIN BlOCK 2, 采用3Des进行加密 参考: des和3Des加密算法实现 要点:因为3DES是对称加密算法,key是24位, ...

  4. java php 3des实现

    php.java.android.ios通用的3des方法:http://blog.csdn.net/zcjwsrf/article/details/47659137 PHP使用3DES算法加密解密字 ...

  5. c#加密,java解密(3DES加密)

    c#代码 using System; using System.Security; using System.Security.Cryptography; using System.IO; using ...

  6. java进行3DES加解密

    import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.Secre ...

  7. 【推荐】JAVA基础◆浅谈3DES加密解密

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  8. iOS 3DES加密 和 java 3DES 解密

    首先进入头文件: #import <CommonCrypto/CommonDigest.h> #import <CommonCrypto/CommonCryptor.h> #i ...

  9. java 与 c# 3des 加解密

    java 与 c# 3des 加解密   主要差异如下: 1.  对于待加密解密的数据,各自的填充模式不一样 C#的模式有:ANSIX923.ISO10126.None.PKCS7.Zero,而Jav ...

随机推荐

  1. 在 C# 控制台中记录异常日志并输出

    最近做了一个小程序,要求在控制台中记录程序运行的异常并输出到指定的文件夹中,以下是我的具体的程序代码: public static void ErrorLog(Exception ex) { stri ...

  2. IE SEESION共享的问题

    前几天,我们在开发工作流的过程中出现了一个比较奇怪的问题,原本看不到流程的人员,在登陆后却能够看到对应流程的待办任务,并且导致流程流向混乱!在调模式下调试程序发现(假设登陆两个用户)第二个登陆用户的信 ...

  3. typedef 与define 的区别

    typedef和#define的用法与区别   typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译 ...

  4. ASP.NET 数据库页面访问简单工具

    在工作中,有很多项目已上线后,很多项目的数据库服务器都不会对外开放的,外网想直接访问客户数据库服务器时,可能会出现困难. 这时就需要一个可以查询,更新数据库操作的页面了: 本来用sql语句直接操作数据 ...

  5. Solarwinds Orion NPM实战视频演示

    Orion Network Performance Monitor是全面的带宽性能监控和故障管理软件,能监控并收集来自路由器.交换机.服务器和其他SNMP设备中的数据,您可以直接从Web浏览器上观察您 ...

  6. PAT1015. Reversible Primes

    //题的理解是n在基数b中的的表示中,正序和逆序值都是素数,但是其实可直接判断n,因为n在b中的正常序列值就是再换成十进制就是n,但是不A:不知道为什么 用笨方法,先把n展开成b进制,正常计算其实是翻 ...

  7. jQuery之Nestable

    空间属性置顶: 属性 说明 change 事件,当控件改变时触发 nestable 方法,获取顺序JSON数据,形式如下: [{"id":1},{"id":2} ...

  8. Windows phone 8 学习笔记(5) 图块与通知(转)

    基于metro风格的Windows phone 8 应用提到了图块的概念,它就是指启动菜单中的快速启动图标.一般一个应用必须有一个默认图块,还可以有若干个次要图块.另外,通知与图块的关系比较密切,我们 ...

  9. .net分页控件webdiyer:AspNetPager

    首先下载:AspNetPager.dll   AspNetPager.xml  放到bin目录下 页面添加<%@ Register Assembly="AspNetPager" ...

  10. Git 中级用户的25个提示

    我使用 Git 大约已经有18个月时间,自认为能很好地驾驭它了.但是当我们请到 GitHub 的 Scott Chacon 来到 LVS 公司(一个博彩/游戏软件供应商/开发商)做专场培训时,我在第一 ...