在JAVA中使用DES算法文档格式.docx

上传人:b****6 文档编号:15958303 上传时间:2022-11-17 格式:DOCX 页数:8 大小:16.87KB
下载 相关 举报
在JAVA中使用DES算法文档格式.docx_第1页
第1页 / 共8页
在JAVA中使用DES算法文档格式.docx_第2页
第2页 / 共8页
在JAVA中使用DES算法文档格式.docx_第3页
第3页 / 共8页
在JAVA中使用DES算法文档格式.docx_第4页
第4页 / 共8页
在JAVA中使用DES算法文档格式.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

在JAVA中使用DES算法文档格式.docx

《在JAVA中使用DES算法文档格式.docx》由会员分享,可在线阅读,更多相关《在JAVA中使用DES算法文档格式.docx(8页珍藏版)》请在冰豆网上搜索。

在JAVA中使用DES算法文档格式.docx

  二、ECB模式

  DESECB(电子密本方式)其实非常简单,就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,按照需求补足8个字节进行计算,之后按照顺序将计算所得的数据连在一起即可,各段数据之间互不影响。

  三、CBC模式

  DESCBC(密文分组链接方式)有点麻烦,它的实现机制使加密的各段数据之间有了联系。

其实现的机理如下:

  加密步骤如下:

  1)首先将数据按照8个字节一组进行分组得到D1D2……Dn(若数据不是8的整数倍,用指定的PADDING数据补位)

  2)第一组数据D1与初始化向量I异或后的结果进行DES加密得到第一组密文C1(初始化向量I为全零)

  3)第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2

  4)之后的数据以此类推,得到Cn

  5)按顺序连为C1C2C3……Cn即为加密结果。

  解密是加密的逆过程,步骤如下:

  1)首先将数据按照8个字节一组进行分组得到C1C2C3……Cn

  2)将第一组数据进行解密后与初始化向量I进行异或得到第一组明文D1(注意:

一定是先解密再异或)

  3)将第二组数据C2进行解密后与第一组密文数据进行异或得到第二组数据D2

  4)之后依此类推,得到Dn

  5)按顺序连为D1D2D3……Dn即为解密结果。

  这里注意一点,解密的结果并不一定是我们原来的加密数据,可能还含有你补得位,一定要把补位去掉才是你的原来的数据。

  **

  *DES算法

  */

  publicclassDES{

  /**

  *

  *@returnDES算法密钥

  publicstaticbyte[]generateKey(){

  try{

  //DES算法要求有一个可信任的随机数源

  SecureRandomsr=newSecureRandom();

  //生成一个DES算法的KeyGenerator对象

  KeyGeneratorkg=KeyGenerator.getInstance(”DES”);

  kg.init(sr);

  //生成密钥

  SecretKeysecretKey=kg.generateKey();

  //获取密钥数据

  byte[]key=secretKey.getEncoded();

  returnkey;

  }catch(NoSuchAlgorithmExceptione){

  System.err.println(”DES算法,生成密钥出错!

”);

  e.printStackTrace();

  }

  returnnull;

 /**

  *加密函数

  *@paramdata

  * 

加密数据

  *@paramkey

密钥

  *@return返回加密后的数据

  publicstaticbyte[]encrypt(byte[]data,byte[]key){

  //从原始密钥数据创建DESKeySpec对象

  DESKeySpecdks=newDESKeySpec(key);

  //创建一个密匙工厂,然后用它把DESKeySpec转换成

  //一个SecretKey对象

  SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance(”DES”);

  SecretKeysecretKey=keyFactory.generateSecret(dks);

  //usingDESinECBmode

  Ciphercipher=Cipher.getInstance(”DES/ECB/PKCS5Padding”);

  //用密匙初始化Cipher对象

  cipher.init(Cipher.ENCRYPT_MODE,secretKey,sr);

  //执行加密操作

  byteencryptedData[]=cipher.doFinal(data);

  returnencryptedData;

  }catch(Exceptione){

  System.err.println(”DES算法,加密数据出错!

  *解密函数

解密数据

  *@return返回解密后的数据

  publicstaticbyte[]decrypt(byte[]data,byte[]key){

  //byterawKeyData[]=/*用某种方法获取原始密匙数据*/;

  //从原始密匙数据创建一个DESKeySpec对象

  //创建一个密匙工厂,然后用它把DESKeySpec对象转换成

  cipher.init(Cipher.DECRYPT_MODE,secretKey,sr);

  //正式执行解密操作

  bytedecryptedData[]=cipher.doFinal(data);

  returndecryptedData;

  System.err.println(”DES算法,解密出错。

  publicstaticbyte[]CBCEncrypt(byte[]data,byte[]key,byte[]iv){

  //Cipher对象实际完成加密操作

  Ciphercipher=Cipher.getInstance(”DES/CBC/PKCS5Padding”);

  //若采用NoPadding模式,data长度必须是8的倍数

  //Ciphercipher=Cipher.getInstance(”DES/CBC/NoPadding”);

  IvParameterSpecparam=newIvParameterSpec(iv);

  cipher.init(Cipher.ENCRYPT_MODE,secretKey,param);

/**

  publicstaticbyte[]CBCDecrypt(byte[]data,byte[]key,byte[]iv){

  //usingDESinCBCmode

  IvParameterSpecparam=newIvParameterSpec(i

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1