java使用des加密(des加密算法实现)

本文目录一览:

Java中 DES加密算法

三个文件:

一:skey_DES.java

//对称秘钥生成及对象化保存

import java.io.FileOutputStream;

import java.io.ObjectOutputStream;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

public class Skey_DES

{

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

{

KeyGenerator kg=KeyGenerator.getInstance(“DESede”);

kg.init(168);

SecretKey k=kg.generateKey();

FileOutputStream f=new FileOutputStream(“key1.txt”);

ObjectOutputStream b= new ObjectOutputStream(f);

b.writeObject(k);

}

};

二:SEnc.java

//对称秘钥加密,使用字节码

import java.io.*;

import java.security.*;

import javax.crypto.*;

public class SEnc

{

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

{

String s=”Hello123Hello123Hello123Hello123″;

FileInputStream f=new FileInputStream(“key1.txt”);

ObjectInputStream b=new ObjectInputStream(f);

Key k=(Key)b.readObject();

Cipher cp=Cipher.getInstance(“DESede”);

cp.init(Cipher.ENCRYPT_MODE,k);

byte ptext[]=s.getBytes(“UTF8”);

for(int i=0;iptext.length;i++)

{

System.out.print(ptext[i]+”,”);

}

System.out.println(“”);

byte ctext[]=cp.doFinal(ptext);

for(int i=0;ictext.length;i++)

{

System.out.print(ctext[i]+”,”);

}

FileOutputStream f2=new FileOutputStream(“SEnc.txt”);

f2.write(ctext);

}

};

三:SDec.java

//使用对称秘钥解密

import java.io.*;

import java.security.*;

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;

public class SDec

{

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

{

FileInputStream f=new FileInputStream(“SEnc.txt”);

int num=f.available();

byte[] ctext=new byte[num];

f.read(ctext);

FileInputStream f2=new FileInputStream(“key1.txt”);

ObjectInputStream b=new ObjectInputStream(f2);

Key k=(Key)b.readObject();

Cipher cp=Cipher.getInstance(“DESede”);

cp.init(Cipher.DECRYPT_MODE,k);

byte[] ptext=cp.doFinal(ctext);

String p=new String(ptext,”UTF8″);

System.out.println(p);

}

};

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

}

JAVA和.NET使用DES对称加密的区别

DES加密算法原理:DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位(每组的第8位作为奇偶校验位),产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 轮循环,使用异或,置换,代换,移位操作四种基本运算。

.NET中的DES加密:

对于.NET,框架在System.Security.Cryptography命名空间下提供了DESCryptoServiceProvider作为System.Security.Cryptography.DES加密解密的包装接口,它提供了如下的4个方法:

public override ICryptoTransform CreateDecryptor(byte[] rgbKey, byte[] rgbIV)

public override ICryptoTransform CreateEncryptor(byte[] rgbKey, byte[] rgbIV)

public override void GenerateIV()

public override void GenerateKey()

从.NET类库封装情况,加解密需要传入一个Key和IV向量。而且Key必须为8字节的数据,否则会直接抛异常出来,当使用ECB模式下,不管传入什么IV向量,加密结果都一样

JAVA中的DES加密:

JAVA的javax.crypto.Cipher包下,提供了加密解密的功能,它的静态getInstance方法,可以返回一个Cipher对象,一般有public static final Cipher getInstance(String transformation)方法,transformation为:algorithm/mode/padding,分别表示算法名称,比如DES,也可以在后面包含算法模式和填充方式,但也可以只是算法名称,如为:”DES/CBC/PKCS5Padding”,”DES”等。JAVA中默认的算法为ECB,默认填充方式为PKCS5Padding。Cipher的Init方法用来初始化加密对象,常见的有:

public final void init(int opmode, Key key, AlgorithmParameterSpec params) ,

public final void init(int opmode,Key key, SecureRandom random),用SecureRandom时,一般用于不需要IV的算法模式

总结

对于.NET和JAVA在使用DES对称加密时,需要大家指定一样的算法和填充模式,并且JAVA在写DES加解密算法时,还需要根据创建Cipher对象的不同,正确使用IV向量。在不同系统需要互相数据时,必须要明确的是加密算法,Key和算法模式,再根据不同模式是否需要IV向量,最后是填充模式。

如何使用JAVA实现对字符串的DES加密和解密

/**

 * ECB模式的des加密,以base64的编码输出

 * @param message

 * @param key

 * @return

 * @throws Exception

 */

  public static String desEncrypt(String message, String key)throws Exception{

    // DES/ECB CBC CFB OFB /PKCS5Padding  NoPadding  加密/模式/填充

    Cipher cipher = Cipher.getInstance(“DES”);//默认就是 DES/ECB/PKCS5Padding

    DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());

    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(“DES”);

    SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

    cipher.init(1, secretKey);

   return new BASE64Encoder().encode(cipher.doFinal(message.getBytes(“UTF-8”)));

  }

  /**

   * ECB模式的des解密

   * @param message

   * @param key

   * @return

   * @throws Exception

   */

  public static String desDecrypt(String message, String key)throws Exception{

    Cipher cipher = Cipher.getInstance(“DES”);

    DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());

    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(“DES”);

    SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

    cipher.init(2, secretKey);

    return new String(cipher.doFinal(Base64.decode(message)), “UTF-8”);

  }

你自己写main方法测试一下,应该是没问题的

原创文章,作者:SP1OV,如若转载,请注明出处:https://www.506064.com/n/127538.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
SP1OV的头像SP1OV
上一篇 2024-10-03 23:16
下一篇 2024-10-03 23:16

相关推荐

  • 矩阵的值如何计算

    一、三阶矩阵的值如何计算 三阶矩阵是一个3×3的矩阵,可以表示为: |a11 a12 a13| |a21 a22 a23| |a31 a32 a33| 三阶矩阵的值计算方…

    编程 2024-11-12
  • 上海档案查询指南

    上海档案查询是指在上海市范围内查询并获取个人或团体在过去的历史档案信息,从而了解过去的情况或展开相关研究等。下面将从多个方面为大家介绍上海档案查询的相关情况。 一、查询途径 上海档…

    编程 2024-12-07
  • java之字符串,java的字符串

    本文目录一览: 1、java中字符串的是什么? 2、java中的字符串代表什么意思 3、什么是 Java 中的字符串 4、java8中的字符串的用法 java中字符串的是什么? …

    编程 2024-12-09
  • 使用Java编写PDF解析程序,快速提取PDF文本 – 优化SEO推广

    一、PDF解析简介 PDF(Portable Document Format )是一种非常流行的文件格式,用于显示和打印各种应用程序、平台和设备上所创建的文档。然而,PDF格式与常…

    编程 2024-11-13
  • 使用Java的Date.getTime()方法获取时间戳

    一、什么是时间戳 时间戳(timestamp)是指一个能够表示某个时间点的单一数字。它通常表示从某个固定的起始时间点(比如1970年1月1日)开始所经过的毫秒数或秒数。在计算机科学…

    编程 2024-11-03
  • 使用java实现语言解释,使用java实现语言解释语句

    本文目录一览: 1、解释为什么使用java作为实现语言模糊了方法之间的区别 2、java语言编译和解释执行的具体过程是怎样的? 3、Java程序设计语言是什么意思? 解释为什么使用…

    编程 2024-10-04
  • int值范围的详解

    在编写程序过程中,int类型的数据是最常用的。它能够表示整数的范围,但是我们需要深入了解到这个范围的细节。 一、int类型的表示范围 int类型表示整数的范围是-2^31~2^31…

    编程 2024-12-08
  • 如何使用Spectral Norm算法提高代码性能

    代码性能一直是程序员关注的一个主题,通过使用高效的算法可以在很大程度上提高代码的性能。Spectral Norm算法是一个数学上的算法,可以应用到计算机领域,能够对矩阵的特征值进行…

    编程 2024-11-09
  • Javascript注释指南

    Javascript注释是一个好的编码实践,它对于代码的可读性和可维护性非常重要。在本篇文章中,我们将从各个方面详细阐述Javascript注释的重要性,以及如何正确地注释代码。 …

    编程 2024-11-21
  • 深入php数据缓存的使用说明,php常用缓存技术

    本文目录一览: 1、php怎么使用缓存 2、php 数据缓存 3、php 中如何使用缓存,使用哪种缓存机制最好; php怎么使用缓存 假设要访问add_friend.php,先查看…

    编程 2024-12-02

发表回复

登录后才能评论