Java Cipher类 DES算法(加密与解密)

1.加密解密类

import java.security.*;

import javax.crypto.*;

import java.io.*;

//对称加密器
public class CipherMessage {
private String algorithm; // 算法,如DES
private Key key; // 根据算法对应的密钥
private String plainText; // 明文 KeyGenerator keyGenerator;
Cipher cipher; // 函数进行初始化
CipherMessage(String alg, String msg) {
algorithm = alg;
plainText = msg;
} // 加密函数,将原文加密成密文
public byte[] CipherMsg() {
byte[] cipherText = null; try {
// 生成Cipher对象
cipher = Cipher.getInstance(algorithm);
// 用密钥加密明文(plainText),生成密文(cipherText)
cipher.init(Cipher.ENCRYPT_MODE, key); // 操作模式为加密(Cipher.ENCRYPT_MODE),key为密钥
cipherText = cipher.doFinal(plainText.getBytes()); // 得到加密后的字节数组
// String str = new String(cipherText);
} catch (Exception e) {
e.printStackTrace();
}
return cipherText;
} // 解密函数,将密文解密回原文
public String EncipherMsg(byte[] cipherText, Key k) {
byte[] sourceText = null; try {
cipher.init(Cipher.DECRYPT_MODE, k); // 操作模式为解密,key为密钥
sourceText = cipher.doFinal(cipherText);
} catch (Exception e) {
e.printStackTrace();
}
return new String(sourceText); } // 生成密钥
public Key initKey() {
try {
// 初始化密钥key
keyGenerator = KeyGenerator.getInstance(algorithm);
keyGenerator.init(56); // 选择DES算法,密钥长度必须为56位
key = keyGenerator.generateKey(); // 生成密钥
} catch (Exception ex) {
ex.printStackTrace();
}
return key;
} // 获取Key类型的密钥
public Key getKey() {
return key;
} // 获取Key类型的密钥
public Key getKey(byte[] k) {
try {
key = cipher.unwrap(k, algorithm, Cipher.DECRYPT_MODE);
} catch (Exception ex) {
ex.printStackTrace();
}
return key;
} // 获取密钥包装成byte[]类型的
public byte[] getBinaryKey(Key k) {
byte[] bk = null;
try {
bk = cipher.wrap(k);
} catch (Exception ex) {
ex.printStackTrace();
}
return bk;
}
}

2.测试

import java.security.*;

import javax.crypto.*;

import java.io.*;

public class TestMain {

    public static void main(String[] args) {
String algorithm = "DES"; // 定义加密算法,可用 DES,DESede,Blowfish
String message = "Hello World. 这是待加密的信息"; // 生成个DES密钥
Key key; CipherMessage cm = new CipherMessage(algorithm, message);
key = cm.initKey();
byte[] msg = cm.CipherMsg();
System.out.println("加密后的密文为:" + new String(msg));
// System.out.println("密钥为:"+new String(cm.getBinaryKey(key))); System.out.println(cm.getBinaryKey(key));
System.out.println("解密密文为:" + cm.EncipherMsg(msg, key)); } }

【转】Java Cipher类 DES算法(加密与解密)的更多相关文章

  1. java sm4国密算法加密、解密

      java sm4国密算法加密.解密 CreationTime--2018年7月5日09点20分 Author:Marydon 1.准备工作 所需jar包: bcprov-jdk15on-1.59. ...

  2. Java中使用RSA算法加密

    Java中使用RSA算法加密 概述 RSA加密算法是一种非对称加密算法 RSA加密的方式 使用公钥加密的数据,利用私钥进行解密 使用私钥加密的数据,利用公钥进行解密 RSA是一对密钥.分别是公钥和私钥 ...

  3. 基于DES算法加密的防撞库密码系统项目总结

    项目内容:基于DES算法加密的防撞库密码系统 小组名:zqhzkzkj 目标:1.对用户输入的8位字符进行DES加密,要求用户输入8位密钥 2.对于不同的网站,不同的用户名生成不同的密码 小组成员:周 ...

  4. DES的加密与解密算法(Python实现)

    DES的加密与解密算法(Python实现) 密码学实验:实现了DES的简单的加密和解密算法,DES算法的相关资料网上很多,这里不再赘述,仅仅贴出源代码给大家分享,源码中包含很多汉字注释,相信大家都是可 ...

  5. ORACLE 字段AES算法加密、解密

    ORACLE 字段AES算法加密.解密(解决中文乱码问题)2014年02月12日 17:13:37 华智互联 阅读数:97971.加解密函数入口 CREATE OR REPLACE FUNCTION ...

  6. 【java工具类】AES加密解密

    百度百科一下,AES:高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准 ...

  7. JAVA的对称加密算法AES——加密和解密

    出自: http://blog.csdn.net/hongtashan11/article/details/6599645 http://www.cnblogs.com/liunanjava/p/42 ...

  8. java 实现文件内容的加密和解密

    package com.umapp.test; import java.io.FileInputStream; import java.io.FileOutputStream; import java ...

  9. 备忘DES带向量的加密和解密与DES简单加密与解密

    package com.ego.util; import java.security.Key; import java.security.SecureRandom; import java.secur ...

随机推荐

  1. Grunt:GruntFile.js

    ylbtech-Grunt:GruntFile.js 1.返回顶部 1. module.exports = function (grunt) { grunt.initConfig({ useminPr ...

  2. openstack 虚拟机添加网卡

    Openstack dashborad是没有给虚拟机添加网卡这个功能的,但是后台是有这行的接口的. 首先我们创建一个虚拟机,这个虚拟机制11.11.11网段的如图:

  3. openStack高可用性和灾备方案

    1. 基础知识 1.1 高可用 (High Availability,简称 HA) 高可用性是指提供在本地系统单个组件故障情况下,能继续访问应用的能力,无论这个故障是业务流程.物理设施.IT软/硬件的 ...

  4. GET 和 POST两种调用方式

    http://www.cnblogs.com/java-pan/archive/2012/02/26/httpclient-post-get.html 通过get和post方式调用http接口,总结如 ...

  5. .NET 下的 POP3 编程代码共享

    前一段时间在论坛上看见有人问如何使用.net进行POP3编程,其实POP3的使用很简单,所以.net没有向SMTP那样给出相应的类来控制. 废话少说,程序员最需要的使代码. 1.打开VS.NET 20 ...

  6. day1 java基础回顾-集合

    1.集合 1.1 集合的类型与各自的特性 ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList: 数组实现, 查找快, 增删慢 由于是数组实现 ...

  7. 钉钉/支付宝小程序和微信小程序的区别及转换方案

    最近接到一个工作任务,是把钉钉小程序转微信小程序... 对,居然还有这种操作,之前只听过微信小程序转支付宝小程序的,钉钉转微信是什么鬼

  8. Unicode编码下字符串转换

    VC\MFC当中CString.string.char.char*.char数组.int等类型之间的转换令人晕头转向,特地搜集多篇文章资料,利用代码实例等清晰的理清他们之间的关系和如何转换,其实非常简 ...

  9. 机器学习中的L1、L2正则化

    目录 1. 什么是正则化?正则化有什么作用? 1.1 什么是正则化? 1.2 正则化有什么作用? 2. L1,L2正则化? 2.1 L1.L2范数 2.2 监督学习中的L1.L2正则化 3. L1.L ...

  10. CF1088F Ehab and a weird weight formula【倍增】

    首先把点权归到边上,设点权较小的一个点是v,也就是(u,v)的边权是log2(dis(u,v))*a[v]+a[v]+a[u] 然后还有一个性质就是这棵树按点权最小点提起来就是一个堆 暴力是n^2的M ...