日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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;

}

總結

以上是生活随笔為你收集整理的java 对象加密_java.security包实现对象加密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。