加密文件

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

你可能感兴趣的:(C++,c,算法,Security,C#)