一些加密解密的代码示例

 
package util;

import java.io.*;
import java.security.*;

import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;


/**
* CryptTool 封装了一些加密工具方法, 包括 3DES, MD5 等.
*
* @author BeanSoft
* @version 1.0
* 2004-05-12
*/
public class CryptTool {

 public CryptTool() {
 }

 /**
  * 生成3DES密钥.
  *
  * @param key_byte seed key
  * @throws Exception
  * @return javax.crypto.SecretKey Generated DES key
  */
 public static javax.crypto.SecretKey genDESKey(byte[] key_byte) throws
     Exception {
//    javax.crypto.spec.DESKeySpec deskeyspec = new javax.crypto.spec.DESKeySpec(
//        key_byte);
//    javax.crypto.SecretKeyFactory skf = javax.crypto.SecretKeyFactory.
//        getInstance("DES", "SunJCE");
//    return (javax.crypto.SecretKey) skf.generateSecret(deskeyspec);
   //KeyGenerator kg = KeyGenerator.getInstance("DESede");
   SecretKey k = null;
   k = new SecretKeySpec(key_byte,"DESede");
   return k;
 }

 /**
  * 3DES 解密(byte[]).
  *
  * @param key SecretKey
  * @param crypt byte[]
  * @throws Exception
  * @return byte[]
  */
 public static byte[] desDecrypt(javax.crypto.SecretKey key, byte[] crypt) throws
     Exception {
   javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance(
       "DESede");
   cipher.init(javax.crypto.Cipher.DECRYPT_MODE, key);
   return cipher.doFinal(crypt);
 }

 /**
  * 3DES 解密(String).
  *
  * @param key SecretKey
  * @param crypt byte[]
  * @throws Exception
  * @return byte[]
  */
 public static String desDecrypt(javax.crypto.SecretKey key, String crypt) throws
     Exception {
   return new String(desDecrypt(key, crypt.getBytes()));
 }

 /**
  * 3DES加密(byte[]).
  *
  * @param key SecretKey
  * @param src byte[]
  * @throws Exception
  * @return byte[]
  */
 public static byte[] desEncrypt(javax.crypto.SecretKey key, byte[] src) throws
     Exception {
   javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance(
       "DESede");
   cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, key);
   return cipher.doFinal(src);
 }

 /**
  * 3DES加密(String).
  *
  * @param key SecretKey
  * @param src byte[]
  * @throws Exception
  * @return byte[]
  */
 public static String desEncrypt(javax.crypto.SecretKey key, String src) throws
     Exception {
   return new String(desEncrypt(key, src.getBytes()));
 }

 /**
  * MD5 摘要计算(byte[]).
  *
  * @param src byte[]
  * @throws Exception
  * @return byte[] 16 bit digest
  */
 public static byte[] md5Digest(byte[] src) throws Exception {
   java.security.MessageDigest alg = java.security.MessageDigest.getInstance(
       "MD5"); // MD5 is 16 bit message digest

   return alg.digest(src);
 }

 /**
  * MD5 摘要计算(String).
  *
  * @param src String
  * @throws Exception
  * @return String
  */
 public static String md5Digest(String src) throws Exception {
   return new String(md5Digest(src.getBytes()));
 }

 /**
  * BASE64 编码.
  *
  * @param src String inputed string
  * @return String returned string
  */
 public static String base64Encode(String src) {
   sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();

   return encoder.encode(src.getBytes());
 }

 /**
  * BASE64 编码(byte[]).
  *
  * @param src byte[] inputed string
  * @return String returned string
  */
 public static String base64Encode(byte[] src) {
   sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();

   return encoder.encode(src);
 }

 /**
  * BASE64 解码.
  *
  * @param src String inputed string
  * @return String returned string
  */
 public static String base64Decode(String src) {
   sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();

   try {
     return new String(decoder.decodeBuffer(src));
   }
   catch (Exception ex) {
     return null;
   }

 }

 /**
  * BASE64 解码(to byte[]).
  *
  * @param src String inputed string
  * @return String returned string
  */
 public static byte[] base64DecodeToBytes(String src) {
   sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();

   try {
     return decoder.decodeBuffer(src);
   }
   catch (Exception ex) {
     return null;
   }

 }


 /**
  * 对给定字符进行 URL 编码.
  *
  * @param src String
  * @return String
  */
 public static String urlEncode(String src) {
   try {
     src = java.net.URLEncoder.encode(src, "GB2312");

     return src;
   }
   catch (Exception ex) {
     ex.printStackTrace();
   }

   return src;
 }

 /**
  * 对给定字符进行 URL 解码
  * @param value 解码前的字符串
  * @return 解码后的字符串
  */
 public String urlDecode(String value) {
   try {
     return java.net.URLDecoder.decode(value, "GB2312");
   }
   catch (Exception ex) {
     ex.printStackTrace();
   }

   return value;
 }

 /** Test crypt */
 public static void main(String[] args) {
   byte src_byte[] = "1234567812345678".getBytes();
   System.out.println(src_byte.length);
   byte key_byte[] = "123456781234567812345678".getBytes();// 3DES 24 bytes key

   try {
     // 生成DES密钥
     javax.crypto.SecretKey deskey;
     //生成DES密钥
//      javax.crypto.KeyGenerator key = javax.crypto.KeyGenerator.getInstance(
//          "DES");
//      key.init(56);
//      deskey = key.generateKey();

     deskey = genDESKey(key_byte);
     System.out.println("Generator DES KEY OK");

     // DES加解密
     byte[] encrypt, decrypt;
     //加密
     encrypt = desEncrypt(deskey, src_byte);
     System.out.println("encrypt=" + new String(encrypt));
     //解密
     decrypt = desDecrypt(deskey, encrypt);
     System.out.println("decrypt=" + new String(decrypt));

//      String s = "12345678";
//      //加密
//      s = desEncrypt(deskey, s);
//      System.out.println("encrypt=" + s);
//      //解密
//      s = desDecrypt(deskey, s);
//      System.out.println("decrypt=" + s);

   }
   catch (Exception ex) {
     ex.printStackTrace();
   }

   System.out.println("BASE64 Test:" + base64Decode(base64Encode("1234")));
 }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
某同学在宿舍公用计算机上面使用文本文件来记录每天的心情故事,但是宿舍公用计算机不能设置密码,同学担心自己的日记被偷看,特委托你来完成如下加密程序: 该程序是一个可加密数据的日记记录工具,具有如下功能要求: 1. 运行系统后,系统给出三个选项:1)新增日记;2)阅读日记;3)退出系统 2. 选择功能1)后,系统提示用户输入日记文件名称和路径,并创建文本文件;同时,用户输入两个字符a和b,作为密钥;创建文件后,用户开始输入日记内容,日记内容为文本形式,将日记内容加密,然后将加密后的内容写入文件中; 3. 选择功能2)后,系统提示用户输入要打开的日记文件的路径和名称,打开文件后,读取文件中的密文,解密后显示出来; 4. 加密算法推荐大家采用简单的文本加密算法来实现,算法思想如下,从明文读入一个字符(英文),使用密钥a与该字符做异或操作,将结果作为密文保存下来,再读入第二个字符,使用密钥b与该字符做异或操作,同样保存结果,以此类推加密全文;解密过程可将密文作为输入完成整个加密过程,返回就是明文。如果同学们有兴趣加密中文,那么可将中文的高八位使用密钥a加密,低八位使用密钥b加密,完成加密过程。 这个加密算法需要使用C语言的位运算运算符,包括:& 按位与、| 按位或、^ 按位异或、~ 取反、<> 右移。 那么本算法中的异或可用如下方法完成,c为明文中取得的一个字符,该字符加密解密)指令如下: c = plaintext[i]; //i+1是奇数使用密钥a,是偶数采用密钥b cipher[i] = c ^ a; 那么在cipher[i]中保存的就是c的密文。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值