导航:首页 > 源码编译 > javades加密解密算法

javades加密解密算法

发布时间:2025-06-28 00:07:05

java 的3DES加密算法代码 谁有啊 需要CBC模式的

在Java中实现3DES加密算法时,首先需要生成密钥。生成密钥的方法如下:

java
public void SkeyDES(){
try {
//使用DESede算法获得密钥生成器
KeyGenerator generator=KeyGenerator.getInstance("DESede");
//初始化密钥生成器,设置密钥的长度为168个长度
generator.init(168);
SecretKey key=generator.generateKey();
//以序列化的方式保存密钥
FileOutputStream fos=new FileOutputStream("key.dat");
ObjectOutputStream outputStream=new ObjectOutputStream(fos);
outputStream.writeObject(key);
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}

接下来是CBC模式下的加密方法:

java
public byte[] SEncCBC(String s) throws Exception{
//从文件key.dat中读取密钥
FileInputStream in=new FileInputStream("key.dat");
ObjectInputStream obinput=new ObjectInputStream(in);
Key key=(Key)obinput.readObject();
obinput.close();
//生成初始向量
byte[] ints=new byte[8];
SecureRandom r=new SecureRandom(ints);
//使用DESede/CBC/PKCS5Padding模式的Cipher实例
Cipher cipher=Cipher.getInstance("DESede/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key,r);
byte[] b=s.getBytes("utf-8");
byte[] byteencrypt=cipher.doFinal(b);
//将初始向量和加密后的数据写入文件
FileOutputStream out=new FileOutputStream("SENcCBC.dat");
out.write(ints);
out.write(byteencrypt);
out.close();
return byteencrypt;
}

在加密过程中,初始向量(IV)对于加密的正确性至关重要。它不仅影响加密结果,而且对于相同的明文和密钥,不同的IV会产生不同的密文,从而增强加密的安全性。

在进行3DES加密时,使用CBC模式可以确保数据的机密性和完整性。通过将初始向量与密钥一起使用,可以防止某些常见的加密攻击,如明文分块攻击。

值得注意的是,在实际应用中,应确保密钥和IV的安全存储和传输。此外,对于长文本的加密,建议使用分段加密,并在加密后的数据中添加必要的标记,以便于解密过程中的正确处理。

在使用上述代码时,请确保您的环境支持DESede算法,并且已经导入了必要的包,如`javax.crypto`和`java.io`。

以上代码示例提供了一个基本的3DES加密实现,适用于需要使用CBC模式进行加密的应用场景。

㈡ DESede加解密-Java

三重数据加密算法(TDEA,Triple Data Encryption Algorithm)即3DES,是使用三次DES加密算法对数据块进行加密。其原理旨在通过增加DES的密钥长度来提高安全性,避免暴力破解。3DES使用3条56位的密钥对数据进行三次加密,相比原版DES,更为安全。加密过程为:C=Ek3(Dk2(Ek1(P))),解密过程为:P=Dk1(EK2(Dk3(C)))。3DES算法使用双长度(16字节)密钥K=(KL||KR)对8字节明文数据块进行三次DES加密或解密。SessionKey的计算采用3DES算法,计算出单倍长度的密钥。

Java中实现3DES加密解密的代码示例如下:

java
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;

public class TripleDES {
public static final String ALGORITHM = "DESede/CBC/PKCS5Padding";

public static Key generateKey(byte[] key) throws Exception {
return new SecretKeySpec(key, ALGORITHM);
}

public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, generateKey(key));
return cipher.doFinal(data);
}

public static byte[] decrypt(byte[] encryptedData, byte[] key) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, generateKey(key));
return cipher.doFinal(encryptedData);
}
}

以上代码定义了一个TripleDES类,包含用于生成密钥、加密和解密数据的方法。使用此代码,您可以轻松地将数据加密和解密过程集成到Java应用中。

请注意,虽然3DES在当时提供了一定的安全性提升,但它现在已经不再被认为是安全的,特别是在面对现代计算能力时。因此,推荐使用更现代的加密算法,如AES,以确保数据安全。

㈢ 如何用JAVA实现字符串简单加密解密

Java中可以使用多种加密算法来加密字符串,例如DES算法。下面通过一个示例来展示如何使用Java实现字符串的加密和解密。

首先,我们需要创建一个密钥。这可以通过调用`KeyGenerator`类的`getInstance`方法来实现。这里我们以DES算法为例:

KeyGenerator keygen = KeyGenerator.getInstance("DES");

接下来,我们需要初始化`KeyGenerator`对象,并生成一个密钥:

keygen.init(512);

使用生成的密钥进行加密操作。这里我们定义一个方法`encryptToDES`,接受一个密钥和要加密的信息,返回加密后的信息:

public String encryptToDES(SecretKey key, String info) { ... }

解密操作则通过另一个方法`decryptByDES`来实现,该方法接受密钥和要解密的密文,返回解密后的信息:

public String decryptByDES(SecretKey key, String sInfo) { ... }

此外,还可以使用其他加密算法,如MD5和SHA-1。这里提供一个MD5加密方法`encryptToMD5`:

public String encryptToMD5(String info) { ... }

以及一个SHA-1加密方法`encryptToSHA`:

public String encryptToSHA(String info) { ... }

通过这些方法,我们可以方便地对字符串进行加密和解密操作。同时,还可以使用公钥和私钥进行数字签名和验证,确保信息的完整性和安全性。

示例代码中还包含了一些辅助方法,如将二进制转化为16进制字符串`byte2hex`,以及将十六进制字符串转化为二进制`hex2byte`。这些方法在加密和解密过程中起到了关键作用。

通过上述方法,我们可以灵活地在Java中实现字符串的加密和解密,确保数据的安全传输和存储。

㈣ 如何用Java进行3DES加密解密

3DES加密解密的核心在于其算法设计。3DES即Triple DES,是一种基于DES算法的加密方法。其主要特点是使用三个不同的密钥,通过三次DES加密过程实现更高的安全性。

在Java中,3DES加密解密的实现步骤如下:

1. 首先定义加密算法为"DESede"。

2. 使用SecretKeySpec生成密钥,密钥长度为24字节。

3. 创建Cipher实例,并初始化为加密或解密模式。

4. 使用doFinal方法进行加密或解密操作。

下面是一个具体的3DES加密解密Java代码示例:

java

package com.nnff.des;

import java.security.Security;

import javax.crypto.Cipher;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

public class ThreeDes {

private static final String Algorithm = "DESede";

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 (Exception e) {

e.printStackTrace();

}

return null;

}

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 (Exception e) {

e.printStackTrace();

}

return null;

}

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 = hs + "0" + stmp;

} else {

hs = hs + stmp;

}

}

return hs.toUpperCase();

}

public static void main(String[] args) {

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};

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)));

}

}

在这个示例中,我们使用了一个24字节的密钥进行加密和解密操作。

通过上述代码,我们可以实现3DES加密和解密功能。

㈤ java des加密,密钥的长度是多少

3des算法是指使用双长度(16字节)密钥k=(kl||kr)将8字节明文数据块进行3次des加密/解密。如下所示:
y
=
des(kl)[des-1(kr)[des(kl[x])]]
解密方式为:
x
=
des-1
(kl)[des
(kr)[
des-1
(kl[y])]]
其中,des(kl[x])表示用密钥k对数据x进行des加密,des-1
(kl[y])表示用密钥k对数据y进行解密。
sessionkey的计算采用3des算法,计算出单倍长度的密钥。表示法为:sk
=
session(dk,data)
3des加密算法为:
void
3des(byte
doublekeystr[16],
byte
data[8],
byte
out[8])
{
byte
buf1[8],
buf2[8];
des
(&doublekeystr[0],
data,
buf1);
udes(&doublekeystr[8],
buf1,
buf2);
des
(&doublekeystr[0],
buf2,
out);
}

㈥ DES加密算法 java实现

c语言的源代码,供参考:

http://hi..com/gaojinshan/blog/item/8b2710c4ece4b3ce39db49e9.html

㈦ java环境下实现idea算法的加密解密

基于Java的IDEA加密算法探讨
随着Internet的迅速发展,电子商务的浪潮势不可挡,日常工作和数据传输都放在Internet网上进行传输,大大提高了效率,降低了成本,创造了良好的效益。但是,由于 Internet网络协议本身存在着重要的安全问题(IP包本身并不继承任何安全特性,很容易伪造出IP包的地址、修改其内容、重播以前的包以及在传输途中拦截并查看包的内容),使网上的信息传输存在巨大的安全风险电子商务的安全问题也越来越突出。加密是电子商务中最主要的安全技术,加密方法的选取直接影响电子商务活动中信息的安全程度,在电子商务系统中,主要的安全问题都可以通过加密来解决。数据的保密性可通过不同的加密算法对数据加密来实现。
对我国来讲,虽然可以引进很多的外国设备,但加密设备不能依靠引进,因为它涉及到网络安全、国家机密信息的安全,所以必须自己研制。当前国际上有许多加密算法,其中DES(Data Encryption Standard)是发明最早的用得最广泛的分组对称加密算法,DES用56位蜜钥加密64位明文,输出64位密文,DES的56位密钥共有256 种可能的密钥,但历史上曾利用穷举攻击破解过DES密钥,1998年电子边境基金会(EFF)用25万美元制造的专用计算机,用56小时破解了DES的密钥,1999年,EFF用22小时完成了破解工作,使DES算法受到了严重打击,使它的安全性受到严重威胁。因为JAVA语言的安全性和网络处理能力较强,本文主要介绍使用IDEA(Internation Data Encryption Algorithm )数据加密算法在Java环境下实现数据的安全传输。

一、IDEA数据加密算法

IDEA数据加密算法是由中国学者来学嘉博士和着名的密码专家 James L. Massey 于1990年联合提出的。它的明文和密文都是64比特,但密钥长为128比特。IDEA 是作为迭代的分组密码实现的,使用 128 位的密钥和 8 个循环。这比 DES 提供了更多的 安全性,但是在选择用于 IDEA 的密钥时,应该排除那些称为“弱密钥”的密钥。DES 只有四个弱密钥和 12 个次弱密钥,而 IDEA 中的弱密钥数相当可观,有 2 的 51 次方个。但是,如果密钥的总数非常大,达到 2 的 128 次方个,那么仍有 2 的 77 次方个密钥可供选择。IDEA 被认为是极为安全的。使用 128 位的密钥,蛮力攻击中需要进行的测试次数与 DES 相比会明显增大,甚至允许对弱密钥测试。而且,它本身也显示了它尤其能抵抗专业形式的分析性攻击。

二、Java密码体系和Java密码扩展

Java是Sun公司开发的一种面向对象的编程语言,并且由于它的平台无关性被大量应用于Internet的开发。Java密码体系(JCA)和Java密码扩展(JCE)的设计目的是为Java提供与实现无关的加密函数API。它们都用factory方法来创建类的例程,然后把实际的加密函数委托给提供者指定的底层引擎,引擎中为类提供了服务提供者接口在Java中实现数据的加密/解密,是使用其内置的JCE(Java加密扩展)来实现的。Java开发工具集1.1为实现包括数字签名和信息摘要在内的加密功能,推出了一种基于供应商的新型灵活应用编程接口。Java密码体系结构支持供应商的互操作,同时支持硬件和软件实现。Java密码学结构设计遵循两个原则:(1)算法的独立性和可靠性。(2)实现的独立性和相互作用性。算法的独立性是通过定义密码服务类来获得。用户只需了解密码算法的概念,而不用去关心如何实现这些概念。实现的独立性和相互作用性通过密码服务提供器来实现。密码服务提供器是实现一个或多个密码服务的一个或多个程序包。软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提供器。安装和配置提供器,可将包含提供器的ZIP和JAR文件放在CLASSPATH下,再编辑Java安全属性文件来设置定义一个提供器。Java运行环境Sun版本时,提供一个缺省的提供器Sun。

三、Java环境下的实现

1.加密过程的实现

void idea_enc( int data11[], /*待加密的64位数据首地址*/ int key1[]){

int i ;

int tmp,x;

int zz[]=new int[6];

for ( i = 0 ; i < 48 ; i += 6) { /*进行8轮循环*/

for(int j=0,box=i; j<6; j++,box++){

zz[j]=key1[box];

}

x = handle_data(data11,zz);

tmp = data11[1]; /*交换中间两个*/

data11[1] = data11[2];

data11[2] = tmp;

}

tmp = data11[1]; /*最后一轮不交换*/

data11[1] = data11[2];

data11[2] = tmp;

data11[0] = MUL(data11[0],key1[48]);

data11[1] =(char)((data11[1] + key1[49])%0x10000);

data11[2] =(char)((data11[2] + key1[50])%0x10000);

data11[3] = MUL(data11[3],key1[51]);

}

2.解密过程的实现

void key_decryExp(int outkey[])/*解密密钥的变逆处理*/

{ int tmpkey[] = new int[52] ;

int i;

for ( i = 0 ; i < 52 ; i++) {

tmpkey[i] = outkey[ wz_spkey[i] ] ; /*换位*/

}

for ( i = 0 ; i < 52 ; i++) {

outkey[i] = tmpkey[i];

}

for ( i = 0 ; i < 18 ; i++) {

outkey[wz_spaddrever[i]] = (char)(65536-outkey[wz_spaddrever[i]]) ; /*替换成加法逆*/

}

for ( i = 0 ; i < 18 ; i++){

outkey[wz_spmulrevr[i]] =(char)(mulInv(outkey[wz_spmulrevr[i]] )); /*替换成乘法逆*/

}

}

四、总结

在实际应用中,我们可以使用Java开发工具包(JDK)中内置的对Socket通信的支持,通过JCE中的Java流和链表,加密基于Socket的网络通信.我们知道,加密/解密是数据传输中保证数据完整性的常用方法,Java语言因其平台无关性,在Internet上的应用非常之广泛.使用Java实现基于IDEA的数据加密传输可以在不同的平台上实现并具有实现简洁、安全性强等优点。

阅读全文

与javades加密解密算法相关的资料

热点内容
苹果画图的室内app叫什么 浏览:855
什么服务器功耗小 浏览:382
怎么删除助手文件夹 浏览:716
奇瑞风云2空调压缩机多少钱 浏览:777
硬件加密芯片手机 浏览:343
什么app买东西便宜又好 浏览:553
运动app配速是什么 浏览:633
51单片机SPWM逆变器 浏览:621
theisle怎么看服务器人数 浏览:279
shell运行linux命令 浏览:503
安卓电视版什么意思 浏览:604
什么app录音可以循环播放 浏览:561
如何投屏游戏安卓 浏览:645
android百度地图集成 浏览:78
200m宽带算法 浏览:822
怎么把相册命名为空文件夹 浏览:947
翻新二手车解压 浏览:694
公钥加密私钥加密流程图 浏览:499
苹果手机看本地视频用什么app 浏览:301
为什么某app打不开 浏览:391