java 对象加密_java.security包实现对象加密

Java原生支持常见的加密算法,例如DES、RSA。随便写点关于Java安全包的东西。

Java.security.Provider对象官方的解释是:实现了 Java 安全性的一部分或者全部。

provider 可能实现的服务包括:算法(如 DSA、RSA、MD5 或 SHA-1),密钥的生成、转换和管理设施(如用于特定于算法的密钥)。

每个 provider 有一个名称和一个版本号,并且在每个它装入运行时中进行配置。

可以通过如下语句查看本地JDK提供的provider类型:

for(Provider p : Security.getProviders()){

System.out.println(p+" "+p.getInfo());

}

javax.crypto.KeyGenerator对象作为对称密钥生成器,JavaAPI当中给出的解释是:密钥生成器是使用此类的某个 getInstance 类方法构造的。

KeyGenerator 对象可重复使用,也就是说,在生成密钥后,可以重复使用同一个 KeyGenerator 对象来生成更多的密钥。生成密钥的方式有两种:与算法无关的方式和特定于算法的方式。不多啰嗦,可以查看API文档,当中强调了一点:如果客户端没有显式地初始化 KeyGenerator(通过调用 init 方法),那么每个提供者都必须提供(并记录)默认初始化。

javax.crypto.SecretKey对称表示密钥。

javax.crypto.spec.IvParameterSpec,此类指定一个初始化向量 (IV)。使用 IV 的例子是反馈模式中的密码,如,CBC 模式中的 DES 和使用 OAEP 编码操作的 RSA 密码。

javax.crypto.Cipher此类为加密和解密提供密码功能。它构成了 Java Cryptographic Extension (JCE) 框架的核心。API中的解释是:为创建 Cipher 对象,应用程序调用 Cipher 的getInstance 方法并将所请求转换的名称传递给它。还可以指定提供者的名称(可选)。

转换 是一个字符串,它描述为产生某种输出而在给定的输入上执行的操作(或一组操作)。转换始终包括加密算法的名称(例如,DES),后面可能跟有一个反馈模式和填充方案。

转换具有以下形式:

“算法/模式/填充”或

“算法”

(后一种情况下,使用模式和填充方案特定于提供者的默认值)。例如,以下是有效的转换:

Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding");

好了,基本的对象介绍完了,下面来看看代码:

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.security.InvalidAlgorithmParameterException;

import java.security.InvalidKeyException;

import java.security.NoSuchAlgorithmException;

import java.security.NoSuchProviderException;

import java.security.Provider;

import java.security.Security;

import javax.crypto.BadPaddingException;

import javax.crypto.Cipher;

import javax.crypto.IllegalBlockSizeException;

import javax.crypto.KeyGenerator;

import javax.crypto.NoSuchPaddingException;

import javax.crypto.SecretKey;

import javax.crypto.spec.IvParameterSpec;

import sun.misc.BASE64Decoder;

public class JavaSecurity {

public static void main(String[] args) {

JavaSecurity js = new JavaSecurity();

String test = "keep foolish , keep hungry";

String entryString = js.encrypt(test);

System.out.println(entryString);

String decryptString = js.decrypt(entryString);

System.out.println(decryptString);

}

public JavaSecurity(){

try {

this.init();

} catch (NoSuchAlgorithmException | NoSuchProviderException

| UnsupportedEncodingException | NoSuchPaddingException e) {

e.printStackTrace();

}

}

/**

* init()

* @throws NoSuchAlgorithmException

* @throws NoSuchProviderException

* @throws UnsupportedEncodingException

* @throws NoSuchPaddingException

*/

public void init() throws NoSuchAlgorithmException, NoSuchProviderException, UnsupportedEncodingException, NoSuchPaddingException{

//密钥生成器

keyGenerator = KeyGenerator.getInstance("DES", "SunJCE");

//对称密钥

key = keyGenerator.generateKey();

//加解密时的初始化向量 8bytes

iv = new IvParameterSpec("87654321".getBytes("utf-8"));

//DES加密算法,CBC反馈模式,PKCSPadding的填充方案

cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");

}

/**

* 加密

* @param str

* @return

* @throws InvalidKeyException

* @throws InvalidAlgorithmParameterException

* @throws IllegalBlockSizeException

* @throws BadPaddingException

*/

public String encrypt(String str) {

String returnStr = "";

try {

cipher.init(Cipher.ENCRYPT_MODE, key , iv);

} catch (InvalidKeyException | InvalidAlgorithmParameterException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}

byte[] strByte = str.getBytes();

//加密

byte[] encryStr = null;

try {

encryStr = cipher.doFinal(strByte);

} catch (IllegalBlockSizeException | BadPaddingException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}

returnStr = new sun.misc.BASE64Encoder().encode(encryStr);

return returnStr;

}

/**

* 解密

* @param str

* @return

* @throws InvalidKeyException

* @throws InvalidAlgorithmParameterException

* @throws IOException

* @throws IllegalBlockSizeException

* @throws BadPaddingException

*/

public String decrypt(String str) {

String returnStr = "";

try {

cipher.init(Cipher.DECRYPT_MODE, key, iv);

} catch (InvalidKeyException | InvalidAlgorithmParameterException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}

byte[] strByte = null;

try {

strByte = new BASE64Decoder().decodeBuffer(str);

} catch (IOException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}

byte[] returnStrByte = null;

try {

returnStrByte = cipher.doFinal(strByte);

} catch (IllegalBlockSizeException | BadPaddingException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}

returnStr = new String(returnStrByte);

return returnStr;

}

/**

* 密钥生成器

*/

private KeyGenerator keyGenerator;

/**

* 对称密钥

* */

private SecretKey key;

/**

* 加解密时的初始化向量 8bytes

* */

private IvParameterSpec iv;

/**

* cipher

* */

private Cipher cipher;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ajax请求模拟登录

前台 if (Session["username"] ! null){<div class"login"><span style"width:155px;height:85px;display:inline-block;margin-left:50px;margin-top:25px;text-align:center">(Session["username"]) 您好&#xff01;&…

Distinct源码分析

以前比较两个List数据&#xff0c;筛选出所需要的数据时候&#xff0c;一直套两层for循环来执行。用到去重(Distinct)的时候&#xff0c;这两个需求其实都是一样的&#xff0c;都是需要比较两个集合&#xff0c;查看了下它的源码&#xff0c;里面确实有值得借鉴的地方。 先附上…

python3图片转代码_python3图片转换二进制存入mysql示例代码

python3图片转换二进制存入mysql示例代码发布于 2014-09-29 18:00:01 | 198 次阅读 | 评论: 0 | 来源: 网友投递Python编程语言Python 是一种面向对象、解释型计算机程序设计语言&#xff0c;由Guido van Rossum于1989年底发明&#xff0c;第一个公开发行版发行于1991年。Pytho…

oracle面试题[关于case when的用法]

表中有A B C三列,用SQL语句实现&#xff1a;当A列大于B列时选择A列否则选择B列&#xff0c;当B列大于C列时选择B列否则选择C列declare v_sal number:2000; v_tax number; begin case when v_salv_tax:v_sal*0.03; when v_salv_tax:v_sal*0.04; when v_salv_tax:v_sal*0.05; whe…

Javascript面向对象研究心得

这段时间正好公司项目须要&#xff0c;须要改动fullcalendar日历插件&#xff0c;有机会深入插件源代码。正好利用这个机会&#xff0c;我也大致学习了下面JS的面向对象编程&#xff0c;感觉收获还是比較多的。 所以写了以下这篇文章希望跟大家探讨探讨JS的面向对象&#xff0c…

矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence

题目传送门 1 /*2 题意&#xff1a;加上适当的括号&#xff0c;改变计算顺序使得总的计算次数最少3 矩阵连乘积问题&#xff0c;DP解决&#xff1a;状态转移方程&#xff1a;4 dp[i][j] min (dp[i][k] dp[k1][j] p[i-1] * p[k] * p[j]) (i<k<j)5 s…

md5加密java实现_MD5加密(java实现)

java实现MD5加密:import java.security.MessageDigest;import sun.misc.BASE64Encoder;public class Tools {/** md5加密算法* return:结果为16进制的字符串长度为32位*/public static String getMd5String(String str) throws Exception{StringBuilder md5Code new StringBui…

POJ 1273 Drainage Ditches 最大流

很裸的最大流问题&#xff0c;不过注意会有重边&#xff0c;o(╯□╰)o&#xff0c;被阴了WA了一发 还有就是要用long long #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <stri…

java语言 编译原理_【Java学习】深入分析Java的编译原理

在《Java代码的编译与反编译》中&#xff0c;有过关于Java语言的编译和反编译的介绍。我们可以通过javac命令将Java程序的源代码编译成Java字节码&#xff0c;即我们常说的class文件。这是我们通常意义上理解的编译。但是&#xff0c;字节码并不是机器语言&#xff0c;要想让机…

javaSE_base04_集合框架

四、集合框架1&#xff1a;String类&#xff1a;字符串(重点) (1)多个字符组成的一个序列&#xff0c;叫字符串。 生活中很多数据的描述都采用的是字符串的。而且我们还会对其进行操作。 所以&#xff0c;java就提供了这样的一个类供我们使用。 (2)创建字…

火狐浏览器中打开java_将Firefox浏览器嵌入Java Swing中

小编典典这是一些示例代码import java.awt.Color;import java.awt.Component;import java.awt.Container;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.FileNotFoundException;import java.io.File;imp…

实验 使用 vivado zedboard GPIO 开关 开控制 LED

前面我做了几个实验 都没有用过 开关&#xff0c;这一次用一用 发现 vivado 真的挺方便 所以 使用 vivado 开发 1.建工程 我使用 vivado 2013.4 创建新工程 –》 next –》next 勾选 Do not specify sources at this time //这样跳过后面两个添加文件页面 选择 board –》 ze…

java 最优化_java-多维度求最优解

拿出11条数据//条件每个位置(position)的人数限制每队(team)人数不能超过7人credits的总和在100分之内(包含100)总分(points)最高//位置人数限制position-1 : 1 position-2 : 3-5 position-3 : 1-3 position-4 : 3-5//模拟数据{points credits position team56 9.0 1 t154 9.1 …

polymer web componets 大前端

大前端 东南水乡 一叶小舟拂过水面 船上两位大侠把酒言欢 一位是玉真人 另一位是张真人 两人喝到开心处 变作对联起来 上联 前端研究&#xff0c;研究个屁~ 下联 前端设计&#xff0c;设计个屁~ 横批 前端sb特色 polymer 提供创建自定义和标准dom元素类似的自定义元素功能 可以…

citespace安装如何配置JAVA_citespace超详细安装教程

想用citespace写篇量化的文献综述但是试了很多次一直运行不了&#xff0c;无奈因为要分析的论文太多&#xff0c;只能继续学着下载……在踩了很多坑之后终于搞定了&#xff01;&#xff01;我参考了知乎大神们写的学习指南&#xff0c;但在下载过程中还是会遇到一点点小问题&am…

Ubuntu下安装配置JDK

第一步&#xff1a;下载jdk-7-linux-i586.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-i586.tar.gz 若失败&#xff0c;则自行下载即可。 第二步&#xff1a;解压安装 sudo tar zxvf ./jdk-7-linux-i586.tar.gz -C /usr/lib/jvm cd /usr/lib/…

必应(Bing)每日图片获取API

必应(Bing)每日图片获取API January 11, 2015 API http://lab.dobyi.com/api/bing.php 介绍 ValueDescriptiontitle标题desc描述url图片地址你们自由发挥……

java取模多位数_JAVA大数类—基础操作(加减乘除、取模、四舍五入、设置保留位数)...

当基础数据类型长度无法满足需求时可以使用大数类构造方法接受字符串为参数1 BigInteger bInt new BigInteger("123123");2 BigDecimal bDouble new BigDecimal("123123.123123124");基础操作(取模使用divideAndRemainder方法&#xff0c;返回的数组第二…

HDU 4902

数据太弱&#xff0c;直接让我小暴力一下就过了&#xff0c;一开始没注意到时间是15000MS&#xff0c;队友发现真是太给力了 #include <cstdio> #include <cstring> int n,q,a[100005],x[100005],p,l[100005],r[100005],t[100005]; int tree[1000005]; void build(…

tcp/udp高并发和高吐吞性能测试工具

在编写一个网络服务的时候都比较关心这个服务能达到多少并发连接,而在这连接的基础上又能达到一个怎样的交互能力.编写服务已经是一件很花力气的事情,而还要去编写一个能够体现结果的测试工具就更加消耗工作时间.下面介绍一个测试工具只需要简单地设置一下就能对tcp/udp服务进行…