西凤酒网站建设的目标,企业管理咨询网站,wordpress前端是什么,wordpress显示文章idJava原生支持常见的加密算法#xff0c;例如DES、RSA。随便写点关于Java安全包的东西。Java.security.Provider对象官方的解释是#xff1a;实现了 Java 安全性的一部分或者全部。provider 可能实现的服务包括#xff1a;算法(如 DSA、RSA、MD5 或 SHA-1)#xff0c;密钥的…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();//加解密时的初始化向量 8bytesiv 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;}