首先认识一下3DES加密中(也是其他加密)主要涉及到的类
导入java中封装java算法的包:sunjce_provider.jar
注意通常导入这个包是会报编译错误,因此需要对myeclipse做如下配置
参考链接
http://jameszhao1987.iteye.com/blog/1468673
然后认识一下涉及的类
KeyGenerator类主要是用于生成密钥的(SecretKey 或是 Key)。
通过deskey = keygen.generateKey();但是这种是依靠类自己去创建密钥,而现实开发中都需要传入自己的私钥然后进行加密和解密。
因此这里选择的是使用
SecretKeyFactory类生成带有自定义私钥的Key类。
注意在使用前需要Security.addProvider(new SunJCE());即将加密包中的class注册到虚拟机当中。
通过SecretKeyFactory实例的generateSecret(KeySpec keySpec)来生产密钥。这里的keySpec我们传入DESedeKeySpec KeySpec = new DESedeKeySpec(input);input就是我们私钥对应的Hex.decode(KeyStr) (使用Hex需要使用bcprov-jdk14-116.jar)返回的数组.KeyStr就是我们的私钥字符串
SecretKeyFactory实例通过SecretKeyFactory.getInstance("DESede")获得。
得到密钥后就可以进行加密操作了,加密操作使用的是
Cipher类,
通过Cipher.getInstance(“DESede/CBC/PKCS5Padding”);获得cipher实例。
调用cipher.init(mode,secretKey,AlgorithmParameterSpec)进行初始化,之后就可以调用c.doFinal(input);来完成加密了。
mode是对应的加密和机密模式,对应的值为1和2,secretKey对应的是上面返回的密钥。
AlgorithmParameterSpec为对应的算法参数。如果为空jdk会默认生产一个对应值。
但是通常返回的是一个加密字符串,所以可以对doFinal方法返回的加密字节数组进行new String(Base64Encode(output), CodingType),即进行base64加密后转换成所需要的编码的字符串。
对加密字符串进行解密和上面比较相似,就是首先对机密串进行base64解密,然后获取密钥,将Cipher.init方法第一个参数设置成机密模式,最后对返回的解密字节数组进行new String(output, CodingType);字符串拼装。
然后讲一下密钥是如何获取的。密钥是长度是48的十六进制。所以获取时
使用下面的方法
StringBuffer key = new StringBuffer();
Random random = new Random();
for (int i = 0; i < 48; ++i) {
int cursor = Math.abs(random.nextInt()) % 16;
key.append(keyChars[cursor]);
}
return key.toString();
keyChars为0到F的字符数组。
即随机生成48个int数字。然后让生成的每个数字对16取余数。最后通过余数找到对应的16进制数。
分享到:
相关推荐
在这个压缩包中,PDF文件详细介绍了DES算法的实现原理,这对于理解DES的工作流程和学习密码学是非常有价值的。 DES算法的核心是一个64位的数据块和56位的密钥。它采用Feistel结构,将数据块分为左右两部分,通过一...
描述中的"51平台的标准DES算法,在ATMEL89C52上验证通过,用keil51编译"进一步确认了这个压缩包的内容。51平台指的是基于Intel 8051架构的微控制器,这类设备广泛应用于嵌入式系统中。ATMEL89C52是51系列的一个具体...
本文将深入探讨两种常见的加密算法:3DES(Triple Data Encryption Standard)和RSA(Rivest-Shamir-Adleman)。这两种算法在实际应用中广泛使用,特别是对于数据传输和存储的安全需求。 3DES是一种对称加密算法,...
本文实例讲述了python实现的DES加密算法和3DES加密算法。分享给大家供大家参考。具体实现方法如下: ############################################################################# # Documentation # #########...
从网上下载的一个文章,感觉这个是讲解DES加密算法写的最好的文章了。拿来分享。
**J2ME DES算法详解** DES(Data Encryption Standard)算法是一种经典的对称加密技术,它在信息安全领域有着广泛的应用。J2ME(Java Micro Edition)是Java平台的一个子集,主要用于移动设备和嵌入式系统。在J2ME...
js_DES算法! 很值得下载看看!资源免费,大家分享!!
des加密算法(js+java)加密与解密结果相同 包含三个文件 : des.js des.html ,用于实现前端脚本的加密与解密 des.java 用于后台的加密解密操作; 项目中正好用到,已经过验证,两个加密解密结果相同,分享给...
项目需要:收集很多Unix/Linux C实现des系列算法源代码,不敢独享,分享出来,其中很多也是在CSDN上花积分获得~不容易哦~
des加密算法(js+java)加密与解密结果相同 包含三个文件 : des.js des.html ,用于实现前端脚本的加密与解密 des.java 用于后台的加密解密操作; 项目中正好用到,已经过验证,两个加密解密结果相同,分享给...
在提供的文件列表中,我们看到有一个名为"3des.c"的文件,这很可能是3DES算法的C语言实现源代码。分析这个源码可以帮助理解上述理论知识的实际应用,包括如何设置密钥,执行加密和解密操作等。 总的来说,3DES是一...
结合DES和LSB算法的安全模型,首先利用DES算法加密数据生成密文,然后通过LSB算法将加密后的密文的最后8个密码块转换为8个随机图像,使得通过网络传播的文件看起来就像是普通的图像文件。这种方法能够有效地抵御针对...
首先,需要创建一个KeyGenerator实例,指定3DES算法,然后生成密钥。接着,使用Cipher的init方法初始化加密或解密模式,并进行加密或解密操作。 字符串转换在Java中是非常常见的任务,这包括字符串到其他数据类型的...
des加密算法在实际应用中很常见,尤其是通信相关加密.该文件中提到的算法已经经过个人应用.感觉不错,所以分享出来,当初也找了不少时间
本文实例讲述了PHP实现基于3DES算法加密解密字符串。分享给大家供大家参考,具体如下: 3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据...
3、把根目录Web.config文件中的appSettings的DatabaseType值改为0(因为开 源版是Access数据库,想要SQL数据库请联系我们购买) 4、将/_data/database/下的mdb改名,后缀建议使用.config,同时修 改/_data/config/...
本文实例讲述了Python基于DES算法加密解密实现方法。分享给大家供大家参考。具体实现方法如下: #coding=utf-8 from functools import partial import base64 class DES(object): """ DES加密算法 interface: ...
这个资源包可能包含了一个用C++实现的DES算法,并且已经在VC环境下进行了编译和测试,确保能够正确地进行加密和解密操作。 描述中提到"des源代码,经过vc验证,可以成功解密",意味着这个压缩包提供了DES算法的源...
标签中的"des___vb vb_des vb-des des des_basic"进一步强调了这个资源是关于DES算法的,并且是用VB实现的。"des_basic"可能指的是基础的DES算法实现,适合初学者理解。 在压缩包的文件名称列表中,我们有两个文件...
在这个主题中,我们将深入探讨两种经典的加密算法:DES(Data Encryption Standard)和RSA。这些算法都是基于C语言实现的,使得开发者能够更好地理解和应用它们。 DES是一种对称加密算法,由IBM在1970年代初开发,...