关于加密算法

      DES(Data Encryption Standard):对称算法,数据加密标准,速度较快,适用于加密大量数据的场合;

  3DES(Triple DES):是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高;

  RC2RC4:对称算法,用变长密钥对大量数据进行加密,比 DES 快;

  IDEA(International Data Encryption Algorithm)国际数据加密算法,使用 128 位密钥提供非常强的安全性;

  RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的,非对称算法

  DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准),严格来说不算加密算法;

  AES(Advanced Encryption Standard):高级加密标准,对称算法,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法;

  BLOWFISH,它使用变长的密钥,长度可达448位,运行速度很快;

  MD5:严格来说不算加密算法,只能说是摘要算法

  对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

  在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。(可参见MD5算法词条)

  SSF33,SSF28,SCB2(SM1):国家密码局的隐蔽不公开的商用算法,在国内民用和商用的,除这些都不容许使用外,其他的都可以使用;

      其中,DES加密算法实现代码为:

import java.security.Key;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

 

public class DESUtils {

 private static Key key;
 private static String KEY_STR = "myKey";

 static {
  try {
   KeyGenerator generator = KeyGenerator.getInstance("DES");
   generator.init(new SecureRandom(KEY_STR.getBytes()));
   key = generator.generateKey();
   generator = null;
  } catch (Exception e) {
   throw new RuntimeException(e);
  }
 }

 /**
  * 对字符串进行DES加密

  * @param str 加密字符串
  * @return BASE64编码的加密字符串
  */
 public static String getEncryptString(String str) {
  BASE64Encoder base64en = new BASE64Encoder();
  try {
   byte[] strBytes = str.getBytes("UTF8");
   Cipher cipher = Cipher.getInstance("DES");
   cipher.init(Cipher.ENCRYPT_MODE, key);
   byte[] encryptStrBytes = cipher.doFinal(strBytes);
   return base64en.encode(encryptStrBytes);
  } catch (Exception e) {
   throw new RuntimeException(e);
  }
 }

 /**
  * 对BASE64编码的加密字符串进行解密

  * @param str 解密字符串
  * @return 解密后的字符串
  */
 public static String getDecryptString(String str) {
  BASE64Decoder base64De = new BASE64Decoder();
  try {
   byte[] strBytes = base64De.decodeBuffer(str);
   Cipher cipher = Cipher.getInstance("DES");
   cipher.init(Cipher.DECRYPT_MODE, key);
   byte[] decryptStrBytes = cipher.doFinal(strBytes);
   return new String(decryptStrBytes, "UTF8");
  } catch (Exception e) {
   throw new RuntimeException(e);
  }
 }
}

 

       MD5加密算法实现代码:

import java.security.*;
import java.util.*;

public class md5 {

    private String inStr;
    private MessageDigest md5;

 public md5 (String inStr) {
  this.inStr = inStr;
  try {
   this.md5 = MessageDigest.getInstance("MD5");
  } catch (Exception e){
   System.out.println(e.toString());
   e.printStackTrace();
  }
 }

 public String compute() {
  char[] charArray = this.inStr.toCharArray();
  byte[] byteArray = new byte[charArray.length];

  for (int i=0; i<charArray.length; i++) {
   byteArray[i] = (byte) charArray[i];
  }

  byte[] md5Bytes = this.md5.digest(byteArray);
  StringBuffer hexValue = new StringBuffer();

  for (int i = 0; i < md5Bytes.length; i++) {
   int val = ((int) md5Bytes[i]) & 0xff;
   if (val < 16) {
    hexValue.append("0");
   }
   hexValue.append(Integer.toHexString(val));
  }
  return hexValue.toString();
  }

}

你可能感兴趣的:(加密 算法)