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. Advanced R之词汇表

    转载请注明出处:http://www.cnblogs.com/lizichao/p/4800513.html 词汇表 想要玩得转R,重要的一点是有一个好的工作词汇表.以下是我认为的一个好的词汇表.你不 ...

  2. QT画矩形

    第一次发QT的博文,本人对QT接触没多久,还在入门水平,大牛勿喷哈,之前因为C#  (.net framework)做出来的绘制矩形的程序闪的太厉害了,现在用QT重做一个 先上效果图 代码贴全了 #i ...

  3. JavaScript高级程序设计学习笔记第九章--客户端检测

    1.能力检测:能力检测的目标不是识别特定的浏览器,而是识别浏览器的能力.(我的理解就是识别浏览器能做什么不能做什么) 2.怪癖检测:目标是识别浏览器的特殊行为.但与能力检测确认浏览器支持什么能力不同, ...

  4. sass安装方法,绝对好用的方式

    系统重做了,很多东西都重装,sass也一样,结果在安装的过程中遇到了问题,这里记录下,也给同样遇到问题的朋友们一个思路.本方法是参照http://www.w3cplus.com/sassguide/i ...

  5. reservoir sampling / random shuffle

    randomly choose a sample of k items from a list S containing n elements, the algorithm may be online ...

  6. 序列联配(alignment)和数据库搜索方法简介

    根据一个打分系统,怎么样排对起来打分能够最大.就认为历史上应该是这样子的. 数据同源搜索软件Fasta和Blast 是目前功能最全,使用最广的同源性数据库搜索软件包.他们在Needleman的动态算法 ...

  7. android fragment ontouch 事件

    由于fragment是存在于activity之中的,所以触摸事件会被activity首先得到. 为了在fragment中执行ontouch方法,需要做如下处理: mFragment = new Tab ...

  8. Unity ShaderLab 光照随笔

    unity camera默认3种渲染路径,unity5.50里面有4种 camera Rendering Path 1 vertexLit(逐顶点,一般在vert中处理)  2 forward (前向 ...

  9. 部署开发以太坊dapp的四种方式

    我们已经学习了4种开发和部署智能合约的方法: 第1种是使用 Truffle 和 Ganache .由于我们从上一篇教程中复制了代码,所以我想告诉你,有些插件可用于目前最流行的文本编辑器和 IDEs.有 ...

  10. TensorBoard计算加速

    目录 TensorBoard计算加速 0. 写在前面 1. TensorFlow使用GPU 2. 深度学习训练并行模式 3. 多GPU并行 4. 分布式TensorFlow 4.1 分布式Tensor ...