当前位置: 首页 > news >正文

汕尾市网站建设_网站建设公司_改版升级_seo优化

网站被k 但收录内页,做泥网站,营销型网站制作费用,百度 指数jdk默认带了一些常见的加解密方式#xff0c;当我们常见的加解密不能满足时#xff0c;就需要用到一些第三方的库了#xff0c;bouncycastle就是其中一种。 但是bouncycastle文档比较少。简单介绍一下写法 1.导入依赖 dependencygroupIdorg.bouncycastle当我们常见的加解密不能满足时就需要用到一些第三方的库了bouncycastle就是其中一种。 但是bouncycastle文档比较少。简单介绍一下写法 1.导入依赖 dependencygroupIdorg.bouncycastle/groupIdartifactIdbcprov-jdk15on/artifactIdversion1.69/version/dependency 2.写代码 常见的有两种方式一种使用BouncyCastleProvider另一种使用BlockCipherEngine BouncyCastleProvider使用方式跟原生jdk类似多数getInstance的地方指定一下provider就行 BouncyCastleProvider方式DES加解密代码如下 package com.vvvtimes.demo.util.endecrypt;import lombok.extern.slf4j.Slf4j; import org.bouncycastle.jce.provider.BouncyCastleProvider;import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.IvParameterSpec; import java.security.Key; import java.security.NoSuchAlgorithmException;Slf4j public class BcDesUtil {private static final BouncyCastleProvider provider;//BouncyCastle与JDK加解密类区别//KeyFactory.getInstance(RSA); provider--KeyFactory.getInstance(RSA, provider)//Cipher.getInstance(RSA); provider--Cipher.getInstance(RSA, provider)//Signature.getInstance(SHA1withRSA); provider--Signature.getInstance(SHA1withRSA, provider);//KeyGenerator.getInstance(DES) ; provider--KeyGenerator.getInstance(DES, provider); 或者KeyGenerator.getInstance(DES,BC)/*** 偏移变量固定占8位字节*/private final static String IV_PARAMETER 12345678;/** 生成key*/public byte[] generateKey() {KeyGenerator keyGenerator null;try {keyGenerator KeyGenerator.getInstance(DES,provider);keyGenerator.init(56);SecretKey secretKey keyGenerator.generateKey();byte[] encoded secretKey.getEncoded();return encoded;} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return null;}/*** 生成key** param password 密钥字符串* return 密钥对象* throws Exception*/private static Key convertKey(byte[] password) throws Exception {DESKeySpec dks new DESKeySpec(password);SecretKeyFactory keyFactory SecretKeyFactory.getInstance(DES,provider);return keyFactory.generateSecret(dks);}/*** DES加密*/public static byte[] encrypt(byte[] data, byte[] password) {if (password null || password.length 8) {throw new RuntimeException(加密失败key不能小于8位);}if (data null)return null;try {Key secretKey convertKey(password);Cipher cipher Cipher.getInstance(DES/CBC/PKCS5Padding,provider);IvParameterSpec iv new IvParameterSpec(IV_PARAMETER.getBytes(utf-8));cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);byte[] bytes cipher.doFinal(data);return bytes;} catch (Exception e) {e.printStackTrace();return data;}}/*** DES解密解密字符串*/public static byte[] decrypt(byte[] data, byte[] password) {if (password null || password.length 8) {throw new RuntimeException(加密失败key不能小于8位);}if (data null)return null;try {Key secretKey convertKey(password);Cipher cipher Cipher.getInstance(DES/CBC/PKCS5Padding,provider);IvParameterSpec iv new IvParameterSpec(IV_PARAMETER.getBytes(utf-8));cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);byte[] bytes cipher.doFinal(data);return bytes;} catch (Exception e) {e.printStackTrace();return data;}}/*** byte数组转十六进制** param bytes* return*/public static String byte2HexString(byte[] bytes) {StringBuilder hex new StringBuilder();if (bytes ! null) {for (Byte b : bytes) {hex.append(String.format(%02X, b.intValue() 0xFF));}}return hex.toString();}//测试public static void main(String[] args) throws Exception {String source admin测试信息1234!#$%^*()_;System.out.println(原 文: source);String password lw1121902023;byte[] encryptDataBytes encrypt(source.getBytes(utf-8), password.getBytes(utf-8));String encryptData byte2HexString(encryptDataBytes);System.out.println(加密后: encryptData);byte[] decryptDataBytes decrypt(encryptDataBytes, password.getBytes(utf-8));String decryptData new String(decryptDataBytes, utf-8);;System.out.println(解密后: decryptData);}static {provider new BouncyCastleProvider();} }BlockCipherEngine方式的DES加解密代码如下 package com.vvvtimes.demo.util.endecrypt;import org.bouncycastle.crypto.BlockCipher; import org.bouncycastle.crypto.BufferedBlockCipher; import org.bouncycastle.crypto.InvalidCipherTextException; import org.bouncycastle.crypto.engines.DESEngine; import org.bouncycastle.crypto.modes.CBCBlockCipher; import org.bouncycastle.crypto.paddings.PKCS7Padding; import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher; import org.bouncycastle.crypto.params.DESParameters; import org.bouncycastle.crypto.params.ParametersWithIV; import org.bouncycastle.jce.provider.BouncyCastleProvider;import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException;public class BcDesEngineUtil {private final static BlockCipher engine;private static final BouncyCastleProvider provider;/*** 偏移变量固定占8位字节*/private final static String IV_PARAMETER 12345678;/*** 生成key** param password 密钥字符串* return 密钥对象* throws Exception*/private static byte[] convertKeyEncoded(byte[] password) {byte[] result null;try {DESKeySpec dks new DESKeySpec(password);SecretKeyFactory keyFactory SecretKeyFactory.getInstance(DES,provider);SecretKey secretKey keyFactory.generateSecret(dks);return secretKey.getEncoded();} catch (InvalidKeyException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (InvalidKeySpecException e) {e.printStackTrace();}return result;}private static byte[] encrypt( byte[] ptBytes,byte[] key) throws InvalidCipherTextException, UnsupportedEncodingException {BufferedBlockCipher cipher new PaddedBufferedBlockCipher(new CBCBlockCipher(engine), new PKCS7Padding());cipher.init(true, new ParametersWithIV(new DESParameters(key), IV_PARAMETER.getBytes(utf-8)));byte[] rv new byte[cipher.getOutputSize(ptBytes.length)];int tam cipher.processBytes(ptBytes, 0, ptBytes.length, rv, 0);cipher.doFinal(rv, tam);return rv;}private static byte[] decrypt( byte[] cipherText,byte[] key) throws InvalidCipherTextException, UnsupportedEncodingException {BufferedBlockCipher cipher new PaddedBufferedBlockCipher(new CBCBlockCipher(engine), new PKCS7Padding());cipher.init(false, new ParametersWithIV(new DESParameters( key),IV_PARAMETER.getBytes(utf-8)));byte[] rv new byte[cipher.getOutputSize(cipherText.length)];int tam cipher.processBytes(cipherText, 0, cipherText.length, rv, 0);cipher.doFinal(rv, tam);return rv;}/*** byte数组转十六进制** param bytes* return*/public static String byte2HexString(byte[] bytes) {StringBuilder hex new StringBuilder();if (bytes ! null) {for (Byte b : bytes) {hex.append(String.format(%02X, b.intValue() 0xFF));}}return hex.toString();}//测试public static void main(String[] args) throws Exception {String source admin测试信息1234!#$%^*()_;System.out.println(原 文: source);String password lw1121902023;//String password geffzhan;//String password lw112190;byte[] keyEncoded convertKeyEncoded(password.getBytes(utf-8));byte[] encryptDataBytes encrypt(source.getBytes(utf-8), keyEncoded);String encryptData byte2HexString(encryptDataBytes);System.out.println(加密后: encryptData);byte[] decryptDataBytes decrypt(encryptDataBytes, keyEncoded);String decryptData new String(decryptDataBytes, utf-8);;System.out.println(解密后: decryptData);/**原 文: admin测试信息1234!#$%^*()_加密后: 1D5C21B694A9085A69BE7EA37C197D1632239545298613B944C3AC272750A519F66FB43EFEC55C89解密后: admin测试信息1234!#$%^*()_*/}static {engine new DESEngine();provider new BouncyCastleProvider();}}3.其他示例 AES加解密 package com.vvvtimes.demo.util.endecrypt;import lombok.extern.slf4j.Slf4j; import org.bouncycastle.jce.provider.BouncyCastleProvider;import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.AlgorithmParameters; import java.security.Key; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidParameterSpecException;Slf4j public class BcAesUtil {private static final BouncyCastleProvider provider;/*** 偏移变量固定占8位字节*/private final static String IV_PARAMETER 1234567890123456;/*** AES加密*/public static byte[] encrypt(byte[] data, byte[] password, byte[] iv) {if (data null)return null;try {Key secretKey new SecretKeySpec(password,AES);Cipher cipher Cipher.getInstance(AES/CBC/PKCS7Padding,provider);AlgorithmParameters generateIV generateIV(iv);cipher.init(Cipher.ENCRYPT_MODE, secretKey, generateIV);byte[] bytes cipher.doFinal(data);return bytes;} catch (Exception e) {e.printStackTrace();return data;}}/*** AES解密解密字符串*/public static byte[] decrypt(byte[] data, byte[] password, byte[] iv) {if (data null)return null;try {Key secretKey new SecretKeySpec(password,AES);Cipher cipher Cipher.getInstance(AES/CBC/PKCS7Padding,provider);AlgorithmParameters generateIV generateIV(iv);cipher.init(Cipher.DECRYPT_MODE, secretKey, generateIV);byte[] bytes cipher.doFinal(data);return bytes;} catch (Exception e) {e.printStackTrace();return data;}}public static AlgorithmParameters generateIV(byte[] iv){AlgorithmParameters params null;try {params AlgorithmParameters.getInstance(AES);params.init(new IvParameterSpec(iv));} catch (NoSuchAlgorithmException | InvalidParameterSpecException e) {e.printStackTrace();}return params;}/*** byte数组转十六进制** param bytes* return*/public static String byte2HexString(byte[] bytes) {StringBuilder hex new StringBuilder();if (bytes ! null) {for (Byte b : bytes) {hex.append(String.format(%02X, b.intValue() 0xFF));}}return hex.toString();}//测试public static void main(String[] args) throws Exception {String source admin测试信息1234!#$%^*()_;System.out.println(原 文: source);String password passwordpassword;byte[] encryptDataBytes encrypt(source.getBytes(utf-8), password.getBytes(utf-8),IV_PARAMETER.getBytes(utf-8));String encryptData byte2HexString(encryptDataBytes);System.out.println(加密后: encryptData);byte[] decryptDataBytes decrypt(encryptDataBytes, password.getBytes(utf-8),IV_PARAMETER.getBytes(utf-8));String decryptData new String(decryptDataBytes, utf-8);System.out.println(解密后: decryptData);}static {provider new BouncyCastleProvider();} }RSA私钥解密 签名 package com.vvvtimes.demo.util.endecrypt;import cn.hutool.core.codec.Base64; import org.bouncycastle.jce.provider.BouncyCastleProvider;import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import java.nio.charset.Charset; import java.security.*; import java.security.spec.PKCS8EncodedKeySpec;public class BcRsaUtil {private static final BouncyCastleProvider provider;private static PrivateKey getPrivateKey(String pkcs8Key) {byte[] pkcs8Keybytes Base64.decode(pkcs8Key.getBytes(Charset.forName(UTF-8)));final PKCS8EncodedKeySpec pkcs8EncodedKeySpec new PKCS8EncodedKeySpec(pkcs8Keybytes);try {return KeyFactory.getInstance(RSA, provider).generatePrivate(pkcs8EncodedKeySpec);} catch (Exception ex) {ex.printStackTrace();return null;}}/*** RSA私钥解密** param inputByte 待解密字节数组* param pkcs8Key 私钥* return 明文*/public static byte[] decrypt(byte[] inputByte, String pkcs8Key) {byte[] outputeByte null;try {PrivateKey privateKey getPrivateKey(pkcs8Key);//RSA解密Cipher cipher Cipher.getInstance(RSA, provider);cipher.init(Cipher.DECRYPT_MODE, privateKey);outputeByte cipher.doFinal(inputByte);} catch (NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException | NoSuchAlgorithmException e) {e.printStackTrace();}return outputeByte;}public static byte[] sign(final byte[] array, String pkcs8Key) {try {PrivateKey privateKey getPrivateKey(pkcs8Key);final Signature instance Signature.getInstance(SHA1withRSA, provider);instance.initSign(privateKey);instance.update(array);return instance.sign();} catch (GeneralSecurityException ex) {throw new RuntimeException(License Server installation error 0000000F2, ex);}}static {provider new BouncyCastleProvider();} }实际上bouncycastle还支持部分国密算法这一部分不用自己写实现了。
http://www.ihoyoo.com/news/66805.html

相关文章:

  • 有了域名如何建设网站虚拟主机建wordpress
  • 网站开发有哪些要求潍坊仿站定制模板建站
  • 1688网站怎样做推广没有网站可以做落地页
  • 淘宝做问卷的网站好佛山网站设计公司
  • 海口网站设计公司中国知名公司
  • 合肥网站制作报seo策略
  • 做wd网站实训报告总结长沙网站排名报价
  • 岳阳网站搭建网站虚拟主机是什么
  • app网站开发的特点爱情表白网站制作
  • 怎么做app和网站购物车郑州平面设计工作室
  • 网站做引流保定建设公司网站
  • 网站建设上机实验心得计算机培训班学费
  • 南昌市建设规费标准网站北京建设主管部门网站
  • 信阳高端网站建设上海网站建设好处
  • dedecms wap网站模板wordpress禁止百度抓取
  • 做推手需要开网站吗设计网站的步骤有哪些
  • 114网站建设wordpress网页加速
  • 南宁网站建设业务员房屋设计装修公司
  • 网站运营推广公司微网站免
  • 建设部标准定额网站长安网站建设公司
  • 合肥网站优化价格河北省建设厅官方网站
  • 贵阳网站建设方案书嘉兴企业网站开发
  • 鹰潭做网站的公司excel表格做网站
  • 免费分站网站网站备案号怎么查询
  • kotlin做网站网站专业设计
  • 网站分析软件专业做网站的技术人员
  • 鄂州手机网站设计vue企业门户网站模板
  • 怎样建设大型网站班级网站 php
  • 做任务的网站源码仪征做网站aicjoy
  • 百度云做网站有优势吗我要装修网