漫谈Java加密技术

本文深入探讨了Java中的两种加密技术:基于密码的加密(PBE)和RSA算法。PBE利用口令和随机盐进行加密,提供了一种便捷的安全加密方式。文章通过代码示例展示了如何使用PBE进行加密和解密。接着,介绍了RSA算法,包括其公钥和私钥的概念,以及用于数据加密、解密和数字签名的流程。文章提供了完整的Java代码实现,便于读者理解和应用。
摘要由CSDN通过智能技术生成

除了DES,我们还知道有DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,这里介绍对称加密的另一个算法——PBE
  PBE
  PBE——Password-based encryption(基于密码加密)。其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。是一种简便的加密方式。
  通过java代码实现如下:
  import java.security.Key;
  import java.util.Random;
  import javax.crypto.Cipher;
  import javax.crypto.SecretKey;
  import javax.crypto.SecretKeyFactory;
  import javax.crypto.spec.PBEKeySpec;
  import javax.crypto.spec.PBEParameterSpec;
  /** *//**
  * PBE安全编码组件
  *
  */
  public abstract class PBECoder extends Coder {
  /** *//**
  * 支持以下任意一种算法
  *
  * <pre>
  * PBEWithMD5AndDES
  * PBEWithMD5AndTripleDES
  * PBEWithSHA1AndDESede
  * PBEWithSHA1AndRC2_40
  * </pre>
  */
  public static final String ALGORITHM = "PBEWITHMD5andDES";
  /** *//**
  * 盐初始化
  *
  * @return
  * @throws Exception
  */
  public static byte[] initSalt() throws Exception {
  byte[] salt = new byte[8];
  Random random = new Random();
  random.nextBytes(salt);
  return salt;
  }
  /** *//**
  * 转换密钥<br>
  *
  * @param password
  * @return
  * @throws Exception
  */
  private static Key toKey(String password) throws Exception {
  PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray());
  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
  SecretKey secretKey = keyFactory.generateSecret(keySpec);
  return secretKey;
  }
  /** *//**
  * 加密
  *
  * @param data
  * 数据
  * @param password
  * 密码
  * @param salt
  * 盐
  * @return
  * @throws Exception
  */

        public static byte[] encrypt(byte[] data, String password, byte[] salt)
  throws Exception {
  Key key = toKey(password);
  PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 100);
  Cipher cipher = Cipher.getInstance(ALGORITHM);
  cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
  return cipher.doFinal(data);
  }
  /** *//**
  * 解密
  *
  * @param data
  * 数据
  * @param password
  * 密码
  * @param salt
  * 盐
  * @return
  * @throws Exception
  */
  public static byte[] decrypt(byte[] data, String password, byte[] salt)
  throws Exception {
  Key key = toKey(password);
  PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 100);
  Cipher cipher = Cipher.getInstance(ALGORITHM);
  cipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
  return cipher.doFinal(data);
  }
  } 
  再给出一个测试类:
  import static org.junit.Assert.*;
  import org.junit.Test;
  /** *//**
  *
  * @version 1.0
  * @since 1.0
  */
  public class PBECoderTest {
  @Test
  public void test() throws Exception {
  String inputStr = "abc";
  System.err.println("原文: " + inputStr);
  by

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值