吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7980|回复: 13
收起左侧

[Java 转载] JAVA采用DES算法进行加密解密文件

[复制链接]
Acker 发表于 2017-5-10 20:00
前段时间有个朋友说要一份加密程序,闲来无事写了一份加密程序


源码如下:


[Java] 纯文本查看 复制代码
package key;  
  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.security.Key;  
import java.security.SecureRandom;  
  
import javax.crypto.Cipher;  
import javax.crypto.CipherInputStream;  
import javax.crypto.CipherOutputStream;  
import javax.crypto.KeyGenerator;  
  
public class key {   
  Key key;   
  public key(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   要加密的文件 如c:/test/srcFile.txt  
  * @param destFile 加密后存放的文件名 如c:/加密后文件.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);   
    }   
    cis.close();   
    is.close();   
    out.close();   
  }   
  /**  
  * 文件采用DES算法解密文件  
  *  
  * @param file 已加密的文件 如c:/加密后文件.txt  
  *         * @param destFile  
  *         解密后存放的文件名 如c:/ test/解密后文件.txt  
  */   
  public void decrypt(String file, String dest) throws Exception {   
    Cipher cipher = Cipher.getInstance("DES");   
    cipher.init(Cipher.DECRYPT_MODE, this.key);   
    InputStream is = new FileInputStream(file);   
    OutputStream out = new FileOutputStream(dest);   
    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();   
  }   
  public static void main(String[] args) throws Exception {   
    key td = new key("aaa");   
    
    td.decrypt("D:/gx.txt", "d:/r1.txt"); //解密   
      
  }   
}

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

kenk 发表于 2017-5-14 17:27
这个能看懂么?

[Java] 纯文本查看 复制代码
package com.xxxx.mobile.apad.utils.tools;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

public class NetTools
{
  public static final String[] hex = { "%00", "%01", "%02", "%03", "%04", "%05", "%06", "%07", "%08", "%09", "%0a", "%0b", "%0c", "%0d", "%0e", "%0f", "%10", "%11", "%12", "%13", "%14", "%15", "%16", "%17", "%18", "%19", "%1a", "%1b", "%1c", "%1d", "%1e", "%1f", "%20", "%21", "%22", "%23", "%24", "%25", "%26", "%27", "%28", "%29", "%2a", "%2b", "%2c", "%2d", "%2e", "%2f", "%30", "%31", "%32", "%33", "%34", "%35", "%36", "%37", "%38", "%39", "%3a", "%3b", "%3c", "%3d", "%3e", "%3f", "%40", "%41", "%42", "%43", "%44", "%45", "%46", "%47", "%48", "%49", "%4a", "%4b", "%4c", "%4d", "%4e", "%4f", "%50", "%51", "%52", "%53", "%54", "%55", "%56", "%57", "%58", "%59", "%5a", "%5b", "%5c", "%5d", "%5e", "%5f", "%60", "%61", "%62", "%63", "%64", "%65", "%66", "%67", "%68", "%69", "%6a", "%6b", "%6c", "%6d", "%6e", "%6f", "%70", "%71", "%72", "%73", "%74", "%75", "%76", "%77", "%78", "%79", "%7a", "%7b", "%7c", "%7d", "%7e", "%7f", "%80", "%81", "%82", "%83", "%84", "%85", "%86", "%87", "%88", "%89", "%8a", "%8b", "%8c", "%8d", "%8e", "%8f", "%90", "%91", "%92", "%93", "%94", "%95", "%96", "%97", "%98", "%99", "%9a", "%9b", "%9c", "%9d", "%9e", "%9f", "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%a7", "%a8", "%a9", "%aa", "%ab", "%ac", "%ad", "%ae", "%af", "%b0", "%b1", "%b2", "%b3", "%b4", "%b5", "%b6", "%b7", "%b8", "%b9", "%ba", "%bb", "%bc", "%bd", "%be", "%bf", "%c0", "%c1", "%c2", "%c3", "%c4", "%c5", "%c6", "%c7", "%c8", "%c9", "%ca", "%cb", "%cc", "%cd", "%ce", "%cf", "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", "%d8", "%d9", "%da", "%db", "%dc", "%dd", "%de", "%df", "%e0", "%e1", "%e2", "%e3", "%e4", "%e5", "%e6", "%e7", "%e8", "%e9", "%ea", "%eb", "%ec", "%ed", "%ee", "%ef", "%f0", "%f1", "%f2", "%f3", "%f4", "%f5", "%f6", "%f7", "%f8", "%f9", "%fa", "%fb", "%fc", "%fd", "%fe", "%ff" };
  
  public static final String decode(String paramString1, String paramString2)
    throws UnsupportedEncodingException
  {
    if (paramString1 == null) {
      return null;
    }
    int j = 0;
    int n = paramString1.length();
    if (n <= 500) {}
    StringBuffer localStringBuffer;
    for (int i = n;; i = n / 2)
    {
      localStringBuffer = new StringBuffer(i);
      i = 0;
      if (paramString2.length() != 0) {
        break;
      }
      throw new UnsupportedEncodingException("URLDecoder: empty string enc parameter");
    }
    Object localObject3 = (byte[])null;
    for (;;)
    {
      char c;
      Object localObject1;
      if (i >= n)
      {
        if (j != 0) {
          return localStringBuffer.toString();
        }
      }
      else
      {
        c = paramString1.charAt(i);
        switch (c)
        {
        default: 
          localStringBuffer.append(c);
          i += 1;
          break;
        case '+': 
          localStringBuffer.append(' ');
          i += 1;
          j = 1;
          break;
        case '%': 
          localObject1 = localObject3;
          if (localObject3 == null) {
            j = i;
          }
          break;
        }
      }
      try
      {
        localObject1 = new byte[(n - i) / 3];
        for (;;)
        {
          int i1;
          if ((i < n) && (i1 == 37))
          {
            localObject3 = localObject1;
            j = i;
            throw new IllegalArgumentException("URLDecoder: Incomplete trailing escape (%) pattern");
          }
          label317:
          do
          {
            int k;
            int m = k + 1;
            localObject3 = localObject1;
            j = i;
            localObject1[k] = ((byte)Integer.parseInt(paramString1.substring(i + 1, i + 3), 16));
            i += 3;
            if (i < n)
            {
              localObject3 = localObject1;
              j = i;
              i1 = paramString1.charAt(i);
              k = m;
              break label317;
              localObject3 = localObject1;
              j = i;
              localStringBuffer.append(new String((byte[])localObject1, 0, k, paramString2));
              break label344;
              return paramString1;
            }
            else
            {
              k = m;
              break label317;
              k = 0;
              i1 = c;
            }
            if (i + 2 >= n) {
              break;
            }
          } while (i1 == 37);
        }
      }
      catch (NumberFormatException localNumberFormatException)
      {
        i = j;
        Object localObject2 = localObject3;
        label344:
        j = 1;
        localObject3 = localObject2;
      }
    }
  }
  
  public static byte[] receive(InputStream paramInputStream, int paramInt)
  {
    if (paramInputStream == null) {
      return null;
    }
    Object localObject1 = (byte[])null;
    Object localObject2;
    int i;
    if (paramInt > 0)
    {
      localObject2 = new byte[paramInt];
      i = 0;
      for (;;)
      {
        int j = 0;
        try
        {
          int k = paramInputStream.read((byte[])localObject2, i, paramInt - i);
          j = k;
        }
        catch (IOException localIOException1)
        {
          label40:
          byte[] arrayOfByte;
          break label40;
        }
        if (j <= 0) {
          return localObject2;
        }
        i += j;
      }
    }
    arrayOfByte = new byte[102400];
    for (;;)
    {
      paramInt = 0;
      try
      {
        i = paramInputStream.read(arrayOfByte);
        paramInt = i;
      }
      catch (IOException localIOException2)
      {
        label72:
        break label72;
      }
      localObject2 = localObject1;
      if (paramInt < 0) {
        break;
      }
      if (localObject1 == null)
      {
        localObject1 = new byte[paramInt];
        System.arraycopy(arrayOfByte, 0, localObject1, 0, paramInt);
      }
      else
      {
        localObject2 = new byte[localObject1.length + paramInt];
        System.arraycopy(localObject1, 0, localObject2, 0, localObject1.length);
        System.arraycopy(arrayOfByte, 0, localObject2, localObject1.length, paramInt);
        localObject1 = localObject2;
      }
    }
  }
  
  public static final String urlEncode(String paramString)
  {
    if ((paramString == null) || (paramString.length() < 1)) {
      return "";
    }
    StringBuffer localStringBuffer = new StringBuffer();
    int j = paramString.length();
    int i = 0;
    if (i >= j) {
      return localStringBuffer.toString();
    }
    int k = paramString.charAt(i) & 0xFFFF;
    if ((65 <= k) && (k <= 90)) {
      localStringBuffer.append((char)k);
    }
    for (;;)
    {
      i += 1;
      break;
      if ((97 <= k) && (k <= 122))
      {
        localStringBuffer.append((char)k);
      }
      else if ((48 <= k) && (k <= 57))
      {
        localStringBuffer.append((char)k);
      }
      else if (k == 32)
      {
        localStringBuffer.append('+');
      }
      else if ((k == 45) || (k == 95) || (k == 46) || (k == 33) || (k == 42) || (k == 40) || (k == 41))
      {
        localStringBuffer.append((char)k);
      }
      else if (k <= 127)
      {
        localStringBuffer.append(hex[k]);
      }
      else if (k <= 2047)
      {
        localStringBuffer.append(hex[(k >> 6 | 0xC0)]);
        localStringBuffer.append(hex[(k & 0x3F | 0x80)]);
      }
      else
      {
        localStringBuffer.append(hex[(k >> 12 | 0xE0)]);
        localStringBuffer.append(hex[(k >> 6 & 0x3F | 0x80)]);
        localStringBuffer.append(hex[(k & 0x3F | 0x80)]);
      }
    }
  }
}
 楼主| Acker 发表于 2017-5-10 20:21
Pythoner 发表于 2017-5-10 20:14
向量呢,没有iv自定义吗?

没有     我还写了一个可以自定义的    还没有写完   写完应该会发出来
Pythoner 发表于 2017-5-10 20:14
聊胜于无丶 发表于 2017-5-10 21:18
直接调用Jdk提供的加密算法?
头像被屏蔽
liucq 发表于 2017-5-10 21:27
提示: 作者被禁止或删除 内容自动屏蔽
xinxing124 发表于 2017-5-10 21:40
这个可以一试,不知道是否完整?
头像被屏蔽
尖峰网络科技 发表于 2017-5-10 23:21
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| Acker 发表于 2017-5-11 07:44
聊胜于无丶 发表于 2017-5-10 21:18
直接调用Jdk提供的加密算法?

jdk8好像已经自带了jar包    如果是低版本的需要自己添加一个jar包
 楼主| Acker 发表于 2017-5-11 07:45
xinxing124 发表于 2017-5-10 21:40
这个可以一试,不知道是否完整?

是完整的   我已经测试过了才发出来的
 楼主| Acker 发表于 2017-5-11 07:45

不至于吧
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-30 12:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表