des-关于DES算法解密的问题

问题描述

关于DES算法解密的问题

每次运行代码生成的key值都是不一样的,所以第二次运行不进行加密部分的代码而去解密第一次生成的加密后的文件,是不可行的,这样怎么解决呢?可不可以手动给key赋值,怎么赋值?

public class Locker {
Key key;
public Locker(String str) {
getKey(str);//生成密匙
}
/**
* 根据参数生成KEY
*/
public void getKey(String strKey) {
try {
KeyGenerator _generator = KeyGenerator.getInstance("DES");
_generator.init(new SecureRandom(strKey.getBytes()));
this.key = _generator.generateKey();
_generator = null;
} catch (Exception e) {
throw new RuntimeException("Error initializing SqlMap class. Cause: " + e);
}
}

  /**
  * 文件file进行加密并保存目标文件destFile中
  *
  * @param file   要加密的文件 如mnt/sdcard/PateokeyNormal.txt
  * @param destFile 加密后存放的文件名 如mnt/sdcard/Pateokey.txt
  */
  public void encrypt(String file, String destFile) throws Exception {
    Cipher cipher = Cipher.getInstance("DES");
    // cipher.init(Cipher.ENCRYPT_MODE, getKey());
    cipher.init(Cipher.ENCRYPT_MODE, this.key);
    InputStream is = new FileInputStream(file);
    OutputStream out = new FileOutputStream(destFile);
    CipherInputStream cis = new CipherInputStream(is, cipher);
    byte[] buffer = new byte[1024];
    int r;
    while ((r = cis.read(buffer)) > 0) {
        out.write(buffer, 0, r);
    }
    System.out.println("KEY加密="+key);
    cis.close();
    is.close();
    out.close();
  }
  /**
  * 文件采用DES算法解密文件
  *
  * @param file 已加密的文件 如auth/Pateokey.txt
  *
  */
  public String decrypt(String file) throws Exception {
      System.out.println("KEY解密="+key);
        Cipher cipher = Cipher.getInstance("DES");
        cipher.init(Cipher.DECRYPT_MODE, this.key); 

        InputStream is = new FileInputStream(file);
        String PateoMessage = "";
        OutputStream out =System.out; 

        //  start
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
              CipherOutputStream cos = new CipherOutputStream(baos, cipher);
        //  end
    //    CipherOutputStream cos = new CipherOutputStream(out, cipher); 

        byte[] buffer = new byte[1024];
        int r;
        while ((r = is.read(buffer)) >= 0) {
            System.out.println("正在解密");
             cos.write(buffer, 0, r);
        } 

        cos.close();
        //out.close();
        is.close();
        PateoMessage=baos.toString();
        baos.close();
       System.out.println("正在解密PateoMessage="+PateoMessage);
        return PateoMessage;
  }

}

解决方案

3DES解密算法实现
DES加密和解密算法

解决方案二:

http://wenku.baidu.com/link?url=WGOBVi4wHayY5oV4jguOSNM44V5kC1_vX9w4kqEH18ZcfS_AGX2zOJZtNdterLtKV6N1MhCqoXBL0IromOwu5-0wpbs2bRyqXsjtijtM2Sq

时间: 2024-12-06 17:16:48

des-关于DES算法解密的问题的相关文章

关于DES算法解密,为了安全,不想留下解密后的文件怎么操作?

问题描述 关于DES算法解密,为了安全,不想留下解密后的文件怎么操作? 关于DES算法解密,为了安全,不想留下解密后的文件,只要在代码里面正常读取出来就可以了.这样怎么操作? /** * 文件采用DES算法解密文件 * @param file 已加密的文件 如/mnt/以加密.txt * @param destFile 解密后存放的文件名 如/mnt/解密后文件.txt */ public void decrypt(String file, String dest) throws Excepti

对称加密算法-DES以及DESede算法

一.简述   对称加密算法就是能将数据加解密.加密的时候用密钥对数据进行加密,解密的时候使用同样的密钥对数据进行解密.   DES是美国国家标准研究所提出的算法.因为加解密的数据安全性和密钥长度成正比.des的56位的密钥已经形成安全隐患,在1998年之后就很少被采用.但是一些老旧的系统还在使用.因为这个des算法并没有被美国标准委员会公布全部算法,大家一致怀疑被留了后门.所以慢慢就被淘汰掉了.   后来针对des算法进行了改进,有了三重des算法(DESede).针对des算法的密钥长度较短以

PHP使用DES进行加密与解密的方法详解_php技巧

DES是一种标准的数据加密算法,关于这个算法的详细介绍可以参考wiki和百度百科: wiki百科    百度百科 php中有一个扩展可以支持DES的加密算法,是:extension=php_mcrypt.dll 在配置文件中将这个扩展打开还不能够在windows环境下使用 需要将PHP文件夹下的 libmcrypt.dll 拷贝到系统的 system32 目录下,这是通过phpinfo可以查看到mcrypt表示这个模块可以正常试用了. 下面是PHP中使用DES加密解密的一个例子: 复制代码 代码

java常用工具类之DES和Base64加密解密类_java

一.DES加密和解密 package com.itjh.javaUtil; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.spec.InvalidKeySpecExc

PHP使用DES进行加密和解密

DES是一种标准的数据加密算法,关于这个算法的详细介绍可以参考wiki和百度百科: wiki百科 百度百科 php中有一个扩展可以支持DES的加密算法,是:extension=php_mcrypt.dll 在配置文件中将这个扩展打开还不能够在windows环境下使用 需要将PHP文件夹下的 libmcrypt.dll 拷贝到系统的 system32 目录下,这是通过phpinfo可以查看到mcrypt表示这个模块可以正常试用了.  下面是PHP中使用DES加密解密的一个例子:     //$in

PHP使用DES进行加密与解密的方法

  代码如下: //$input - stuff to decrypt //$key - the secret key to use function do_mencrypt($input, $key) { $input = str_replace(""n", "", $input); $input = str_replace(""t", "", $input); $input = str_replace(

des加密-DES加密问题,DES加密是8位输出的,为什么网上下工具都不是8位输出,在线DES也不是8位输出

问题描述 DES加密问题,DES加密是8位输出的,为什么网上下工具都不是8位输出,在线DES也不是8位输出 DES加密问题,DES加密是8位输出的,为什么网上下工具都不是8位输出,在线DES也不是8位输出 解决方案 谁告诉你"DES加密是8位输出的".加密块的大小可以是任意的. 这里找到一个8bithttp://blog.csdn.net/linfeng999/article/details/29592591 你可以参考下.而且要注意密钥

VBS 偏移量解密工具[算法解密]_vbs

复制代码 代码如下: If wscript.arguments.count=0 Or wscript.arguments.Count>1 then msgbox "请将通过偏移量加密过的 VBS 文件拖放到本脚本上即可[请逐个解密]!",48,"提示" wscript.quit End If For Each fname In wscript.Arguments If Right(fname,3)<> "vbs" Then Ms

DES加密解密算法详解

近段时间因为项目需要,所以一直致力于网络与信息安全方面,免不了涉及了信息的加密与解密,所以这些日子一直在苦苦钻研密码学. 密码学是一门古老的学科,在密码学发展的历史上,出现了多种加密方法,又很早的古典加密算法,后来又出现了更成熟的分组密码,公钥密码及流密码等,因为我只涉及了分组公钥密码,所以在这篇文章中就暂且先介绍分组密码,在说分组密码之前要说的就是密码学中常见的两种体制,一种是对称密码体制,一种是非对称密码体制,也叫公钥密码体制. 对称密码体制是指如果一个加密系统的加密密钥和解密密钥相同,或者