`
aiyalhw
  • 浏览: 61519 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

加密文件

阅读更多
import java.security.*;
import java.security.spec.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import com.Base64;
import java.io.*;

/**
* 和加解密等安全主题相关的工具函数集。
* @author InternetTeam3
* @version 1.0
*/
public class SecurityTools {
  private static final byte[] salt = "webplat".getBytes();

  /**
   * 单向简单加密函数,对字符串加密,结果仍是一个字符串。该方法保证任何情况都不抛出异常或者
   * 返回null。输入为null或""都返回""。返回值为固定长度的28个Base64字符。
   * @param str 明文。
   * @return 加密后字符串。
   */
  public static String digest(String str) {
    try {
      MessageDigest md5 = MessageDigest.getInstance("SHA");
      md5.update(salt); //混淆盐值
      return Base64.encode(md5.digest(str.getBytes()));
    } catch (NoSuchAlgorithmException ex) {
      throw new UnsupportedOperationException(ex.toString());
    }
  }

  /**
   * 计算MD5消息摘要。(MD5摘要长度为16字节,保存摘要的数组长度要够,否则抛异常。)
   * @param data 需要计算摘要的数据。
   * @param offset 计算摘要的数据的起始偏移地址。
   * @param length 数据的长度。
   * @param digest 存放摘要的字节数组。
   * @param dOffset 摘要存放起始位置。
   */
  public static void md5(byte[] data,int offset, int length,
                    byte[] digest, int dOffset) {
    try {
      MessageDigest md5 = MessageDigest.getInstance("MD5");
      md5.update(data,offset,length);
      md5.digest(digest,dOffset,16);
    } catch (NoSuchAlgorithmException ex) {
      ex.printStackTrace();
    } catch (DigestException ex) {
      ex.printStackTrace();
    }
  }

  /**
   * 计算消息摘要。
   * @param data 计算摘要的数据。
   * @param offset 数据偏移地址。
   * @param length 数据长度。
   * @return 摘要结果。(16字节)
   */
  public static byte[] md5(byte[] data,int offset, int length) {
    try {
      MessageDigest md5 = MessageDigest.getInstance("MD5");
      md5.update(data,offset,length);
      return md5.digest();
    } catch (NoSuchAlgorithmException ex) {
      ex.printStackTrace();
      return null;
    }
  }
分享到:
评论
2 楼 aiyalhw 2009-12-07  
/**
   * 对称加密函数,针对字节数据。
   * @param src 明文。
   * @return 加密后数据。
   */
  public static byte[] encrypt(byte[] key, byte[] src) {
    try {
      return getCipher(key,Cipher.ENCRYPT_MODE).doFinal(src);
    } catch (BadPaddingException ex) {
      throw new UnsupportedOperationException(ex.toString());
    } catch (IllegalBlockSizeException ex) {
      throw new UnsupportedOperationException(ex.toString());
    }
  }
  /**
   * 对称加密函数,针对字符串数据。
   * @param str 明文。
   * @return 加密后字符串。
   */
  public static String encrypt(String key, String src) {
    try {
      return Base64.encode(getCipher(key.getBytes("UTF8"),
             Cipher.ENCRYPT_MODE).doFinal(src.getBytes("UTF8")));
    } catch (UnsupportedEncodingException ex) {
      throw new UnsupportedOperationException(ex.toString());
    } catch (BadPaddingException ex) {
      throw new UnsupportedOperationException(ex.toString());
    } catch (IllegalBlockSizeException ex) {
      throw new UnsupportedOperationException(ex.toString());
    }
  }
  /**
   * 对称解密函数,针对字节数据。
   * @param src 明文。
   * @return 加密后数据。
   */
  public static byte[] decrypt(byte[] key, byte[] src) {
    try {
      return getCipher(key,Cipher.DECRYPT_MODE).doFinal(src);
    } catch (IllegalBlockSizeException ex) {
      throw new UnsupportedOperationException(ex.toString());
    } catch (BadPaddingException ex) {
      throw new UnsupportedOperationException(ex.toString());
    }
  }
  /**
   * 对称解密函数,针对字符串数据。
   * @param str 明文。
   * @return 解密后字符串。
   */
  public static String decrypt(String key, String src) {
    try {
      return new String(getCipher(key.getBytes("UTF8"),
             Cipher.DECRYPT_MODE).doFinal(Base64.decode(src)),"UTF8");
    } catch (UnsupportedEncodingException ex) {
      throw new UnsupportedOperationException(ex.toString());
    } catch (BadPaddingException ex) {
      throw new UnsupportedOperationException(ex.toString());
    } catch (IllegalBlockSizeException ex) {
      throw new UnsupportedOperationException(ex.toString());
    }
  }
 
1 楼 aiyalhw 2009-12-07  

  /**
   * 对称加密算法。如果key长度小于8则右补0到8字节,使用DES加密;如果key长度大于等于24则
   * 使用三重DES加密。加密方法举例:<pre>
   * Cipher c = SecurityTools.getCipher("key".getBytes(),Cipher.ENCRYPT);
   * byte[] b = c.doFinal("data".getBytes());
   * </pre>
   * @param algorithm 算法名称。
   * @param key 密钥。
   * @param mode 使用模式如果是加密,则填Cipher.ENCRYPT,解密则填Cipher.DECRYPT。
   * @return 加密后的数据。
   */
  public static Cipher getCipher(byte[] key, int mode) {
    try {
      SecretKeyFactory keyFactory;
      KeySpec keySpec;
      Cipher c;
      if (key.length<8) {
        byte[] oldkey = key;
        key = new byte[8];
        System.arraycopy(oldkey,0,key,0,oldkey.length);
      }
      if (key.length>=24) {
        keyFactory = SecretKeyFactory.getInstance("DESede");
        keySpec = new DESedeKeySpec(key);
        c = Cipher.getInstance("DESede");
      } else {
        keyFactory = SecretKeyFactory.getInstance("DES");
        keySpec = new DESKeySpec(key);
        c = Cipher.getInstance("DES");
      }
      SecretKey k = keyFactory.generateSecret(keySpec);
      c.init(mode,k);
      return c;
    } catch (NoSuchAlgorithmException ex) {
      throw new UnsupportedOperationException(ex.toString());
    } catch (InvalidKeyException ex) {
      throw new UnsupportedOperationException(ex.toString());
    } catch (NoSuchPaddingException ex) {
      throw new UnsupportedOperationException(ex.toString());
    } catch (InvalidKeySpecException ex) {
      throw new UnsupportedOperationException(ex.toString());
    }
  }
}

相关推荐

    TF卡加密文件的破解.doc

    TF卡加密文件的破解 TF卡加密文件的破解方法是指通过一系列操作来解密加密的TF卡文件,以获取原本被加密的文件内容。下面是具体的破解步骤和相关知识点: 一、硬盘文件结构 在TF卡加密文件中,硬盘下有主文件...

    企业级加密文件系统 eCryptfs 详解

    加密文件系统是保护敏感数据免受非法访问的重要手段,尤其在企业环境中,数据安全显得尤为重要。eCryptfs 是一种企业级的加密文件系统,它采用了堆叠式设计,能够透明地在其他文件系统(如 Ext2, Ext3, ReiserFS, ...

    ABC加密文件播放器

    ABC加密文件播放器是一款专为处理ABC格式加密文件设计的专业播放工具。该软件的主要功能是解密并播放受到特定加密保护的ABC视频文件,确保用户能够安全、无阻碍地欣赏内容。作为一款绿色软件,它无需复杂的安装过程...

    JAVA使用数字证书加密文件

    最后,`JAVA使用数字证书加密文件.doc`可能是一个文档,详细介绍了整个过程和步骤,包括如何使用提供的工具和代码示例。`好礼说明 - 副本.txt`可能是关于额外资源或优惠的说明,但与核心的加密技术无关。 综上所述...

    巨石等加密文件破解

    一切文件加密都是纸老虎,程序已经实现了对巨石加密文件的破解,别的加密方式待验证!

    无密破解word加密文档过程

    打开winhex,将加密文档拖入winhex中。 第一步:查找字符串:“BDOC”,按住键盘上的F3,一直到提示没有BDOC 第二步:在BDOC字符串下面查找16进制数值D0CF。找到以后,把D0CF之前的16进制数值删掉 第三步:将...

    加密文件扫描工具.zip

    加密文件扫描工具是一款高效实用的软件,主要用于在网络和本地计算机中搜索加密的文档和压缩文件。这个工具的主要功能是帮助用户查找可能隐藏在大量数据中的加密文件,以便于管理和保护敏感信息。它支持多种常见的...

    加密文件打开步骤

    加密文件打开步骤,每位同学只有一个播放码,请使用常用电脑来生成播放码

    无需密码-直接提取WINRAR加密文件

    无需密码-直接提取WINRAR加密文件

    优化大师加密文件破解方法,万能密码

    优化大师加密文件破解方法,万能密码。 优化大师加密文件破解方法,仅供参考! 加密文件密码忘记了,解决方法详细见 破解.txt 优化大师破解

    加密文件和解密方法.doc

    加密文件和解密方法在日常工作中常常涉及到保护敏感信息的安全,特别是对于使用Microsoft Word处理文档的用户来说。本文主要探讨了几种不同的加密和解密Word文档的方法,旨在帮助用户理解和应对文档保护的需求。 ...

    用winhex破解word加密文档3

    用winhex破解word加密文档,没有找到破解PDF文档的,要是谁有请注意发挥网络精神--分享。

    信捷监控软件加密文件.rar

    本文将围绕“信捷监控软件加密文件”这一主题,深入探讨该软件的数据加密机制,以及其相关组件如`UsedRockey.dll`和`使用说明.pdf`的作用。 首先,让我们了解`UsedRockey.dll`这个动态链接库文件。DLL(Dynamic ...

    加密文件或文件夹 加密文件或文件夹

    ### 加密文件或文件夹的重要知识点 #### 一、加密文件或文件夹 **操作步骤:** 1. **打开Windows资源管理器:** 可通过点击“开始”按钮,找到“程序”-&gt;“附件”-&gt;“Windows资源管理器”来打开。 2. **右键单击...

    国密算法sm4,可加密数据支持中英文特殊字符,可加密文件或字符串,支持cbc和ecb模式

    国密算法sm4,可加密数据支持中英文特殊字符,可加密文件或字符串,支持cbc和ecb模式

    des.zip_DES 加密 文件_DES 文件加密_文件加密

    通过使用des算法对普通文件加密加密的实现

    文件加密————用来加密文件和文件夹

    - 备份与恢复:优秀的加密软件还会提供备份加密文件的功能,以防止意外丢失。 “使用说明l.txt”可能是该加密工具的详细操作指南,涵盖了如何安装、创建加密、解密文件以及处理各种可能出现的问题。用户应仔细阅读...

    手动加密文件方法,加密文件夹

    本文将深入探讨“手动加密文件方法,加密文件夹”这一主题,涵盖在DOS环境下如何进行手动加密操作,以及相关的知识点。 ### 手动加密文件与文件夹的重要性 在日常工作中,我们可能需要存储各种类型的文件,包括但...

    (Java)文件快速加密(异或加密)

    5. **解密**:解密时,读取加密文件的第一个字节,与同一密钥进行异或,得到原来的字节,写回文件。 这种加密方式虽然能显著提升加密速度,但由于只加密了第一个字节,它的安全性非常有限。对于纯文本文件,尤其是...

    MD5加密文档

    MD5加密文档.处理登录,注册的密码一些相关的操作

Global site tag (gtag.js) - Google Analytics