DES生成密钥文件实现加密解密
2012-06-27 14:44
981 查看
import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.security.SecureRandom; import java.util.UUID; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; public class Encode { public static void main(String[] args) { gennerCodeFile();// 生成密钥文件 String str = "我爱你";// 要加密的文字 SecureRandom ensr = new SecureRandom(); SecureRandom desr = new SecureRandom(); try { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\key.des")); SecretKey sk = (SecretKey) ois.readObject(); ois.close(); // 加密 Cipher ench = Cipher.getInstance("DES/ECB/PKCS5Padding"); ench.init(Cipher.ENCRYPT_MODE, sk, ensr); byte[] result = ench.doFinal(str.getBytes()); // 把加密的文件转成16进制字符串 String enstr = convertBytesToStr(result); System.out.println("根据加密文件加密后的字符串:" + enstr); // 加密完成 // 解密 // 把16进制字符串转成byte数组 byte[] enarr = convertStrToBytes(enstr); Cipher dech = Cipher.getInstance("DES/ECB/PKCS5Padding"); dech.init(Cipher.DECRYPT_MODE, sk, desr); byte[] deresult = dech.doFinal(enarr); System.out.println("解密后的文字:" + new String(deresult)); // 完成 } catch (Exception e) { e.printStackTrace(); } } //生成密钥文件的方法 public static void gennerCodeFile() { String codeStr = UUID.randomUUID().toString();//密钥字符串(可以自定义) 如'aaaaaaaaaaaaa' try { DESKeySpec dks = new DESKeySpec(codeStr.getBytes()); SecretKey sk = SecretKeyFactory.getInstance("DES").generateSecret( dks); FileOutputStream fos = new FileOutputStream("D:\\key.des", false); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(sk); oos.close(); } catch (Exception e) { e.printStackTrace(); } } //将16进制字符串转换成字节数组 public static byte[] convertStrToBytes(String digits) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); for (int i = 0; i < digits.length(); i += 2) { char c1 = digits.charAt(i); if ((i + 1) >= digits.length()) throw new IllegalArgumentException("hexUtil.odd"); char c2 = digits.charAt(i + 1); byte b = 0; if ((c1 >= '0') && (c1 <= '9')) b += ((c1 - '0') * 16); else if ((c1 >= 'a') && (c1 <= 'f')) b += ((c1 - 'a' + 10) * 16); else if ((c1 >= 'A') && (c1 <= 'F')) b += ((c1 - 'A' + 10) * 16); else throw new IllegalArgumentException("hexUtil.bad"); if ((c2 >= '0') && (c2 <= '9')) b += (c2 - '0'); else if ((c2 >= 'a') && (c2 <= 'f')) b += (c2 - 'a' + 10); else if ((c2 >= 'A') && (c2 <= 'F')) b += (c2 - 'A' + 10); else throw new IllegalArgumentException("hexUtil.bad"); baos.write(b); } return (baos.toByteArray()); } //将字节数组转换成16进制字符串 public static String convertBytesToStr(byte bytes[]) { StringBuffer sb = new StringBuffer(bytes.length * 2); for (int i = 0; i < bytes.length; i++) { sb.append(convertDigit((int) (bytes[i] >> 4))); sb.append(convertDigit((int) (bytes[i] & 0x0f))); } return (sb.toString()); } private static char convertDigit(int value) { value &= 0x0f; if (value >= 10) return ((char) (value - 10 + 'a')); else return ((char) (value + '0')); } }
相关文章推荐
- 生成RSA密钥、保存到文件、从文件读取、加密、解密等操作。
- JAVA_DES 加密 解密 生成随机密钥
- 利用TEA算法实现加密密码文件生成与解密
- (转)DES、RSA、MD5、SHA、随机生成加密与解密
- C语言实现文件加密解密
- QT文件的转码实现简单加密解密
- PHP rsa密钥生成 加密解密
- OpenSSL EVP_des_ede3_cbc CBC方式的3个密钥的3DES算法 加密解密
- DES加密解密工具2.1及其代码——支持字符串及文件加密,支持3重DES
- java实现对称加密AES和DES的加密、解密
- PHP通过OpenSSL生成证书、密钥并且加密解密数据
- des文件加密、解密
- Java实现Base64给文件加密、解密
- DES文件字符加密解密
- DES ,AES加密解密的实现
- 加密解密算法java实现(2)—DES
- 生成加密和解密的密钥
- DES、RSA、MD5、SHA、随机生成加密与解密
- [转]C# DES 加密/解密类库,支持文件和中文/UNICODE字符,返回BASE64编码字符串
- 密钥加工读取,文件加密解密