Java 實現對稱加密
文章目錄
- Java 實現對稱加密
Java 實現對稱加密
對稱加密指加密和解密使用相同金鑰的加密演算法。
DES(Data Encryption Standard)資料加密標準
- 應用
1 JDK 的 DES 實現
import org.apache.commons.codec.binary.Hex;
import javax.crypto. Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.security.Key;
import java.security.SecureRandom;
public class SymmetricalEncryptionUtils {
public static String jdkDES(String str) {
try {
// 生成 KEY
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
System.out.println(keyGenerator.getProvider());
keyGenerator.init(new SecureRandom());
Key secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
// KEY 轉換
DESKeySpec desKeySpec = new DESKeySpec(keyBytes);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
Key convertSecretKey = factory.generateSecret(desKeySpec);
// 加密
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
byte[] result = cipher.doFinal(str.getBytes());
// 解密
cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
System.out.println("JDK DES Decrypt: " + new String(cipher.doFinal(result)));
return Hex.encodeHexString(result);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
2 Bouncy Castle 的 DES 實現
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.security.Key;
import java.security.SecureRandom;
import java.security.Security;
public class SymmetricalEncryptionUtils {
public static String bcDES(String str) {
Security.addProvider(new BouncyCastleProvider());
try {
// 生成 KEY
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES", "BC");
System.out.println(keyGenerator.getProvider());
keyGenerator.init(new SecureRandom());
Key secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
// KEY 轉換
DESKeySpec desKeySpec = new DESKeySpec(keyBytes);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
Key convertSecretKey = factory.generateSecret(desKeySpec);
// 加密
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
byte[] result = cipher.doFinal(str.getBytes());
// 解密
cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
System.out.println("BC DES Decrypt: " + new String(cipher.doFinal(result)));
return Hex.encodeHexString(result);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
3DES(Triple DES)三重資料加密演算法
1 JDK 的 3DES 實現
import org.apache.commons.codec.binary.Hex;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import java.security.Key;
import java.security.SecureRandom;
public class SymmetricalEncryptionUtils {
public static String jdk3DES(String str) {
try {
// 生成 KEY
KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");
System.out.println(keyGenerator.getProvider());
keyGenerator.init(new SecureRandom());
Key secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
// KEY 轉換
DESedeKeySpec desKeySpec = new DESedeKeySpec(keyBytes);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
Key convertSecretKey = factory.generateSecret(desKeySpec);
// 加密
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
byte[] result = cipher.doFinal(str.getBytes());
// 解密
cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
System.out.println("JDK 3DES Decrypt: " + new String(cipher.doFinal(result)));
return Hex.encodeHexString(result);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
2 Bouncy Castle 的 3DES 實現
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import java.security.Key;
import java.security.SecureRandom;
import java.security.Security;
public class SymmetricalEncryptionUtils {
public static String bc3DES(String str) {
Security.addProvider(new BouncyCastleProvider());
try {
// 生成 KEY
KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede", "BC");
System.out.println(keyGenerator.getProvider());
keyGenerator.init(new SecureRandom());
Key secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
// KEY 轉換
DESedeKeySpec desKeySpec = new DESedeKeySpec(keyBytes);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
Key convertSecretKey = factory.generateSecret(desKeySpec);
// 加密
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
byte[] result = cipher.doFinal(str.getBytes());
// 解密
cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
System.out.println("BC 3DES Decrypt: " + new String(cipher.doFinal(result)));
return Hex.encodeHexString(result);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
AES(Advanced Encryption Standard)高階加密標準
AES 是對稱金鑰加密中最流行的演算法之一。
1 JDK 的 AES 實現
import org.apache.commons.codec.binary.Hex;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.security.SecureRandom;
public class SymmetricalEncryptionUtils {
public static String jdkAES(String str) {
try {
// 生成 KEY
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
System.out.println(keyGenerator.getProvider());
keyGenerator.init(new SecureRandom());
Key secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
// KEY 轉換
Key convertSecretKey = new SecretKeySpec(keyBytes, "AES");
// 加密
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
byte[] result = cipher.doFinal(str.getBytes());
// 解密
cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
System.out.println("JDK AES Decrypt: " + new String(cipher.doFinal(result)));
return Hex.encodeHexString(result);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
2 Bouncy Castle 的 AES 實現
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.security.SecureRandom;
import java.security.Security;
public class SymmetricalEncryptionUtils {
public static String bcAES(String str) {
Security.addProvider(new BouncyCastleProvider());
try {
// 生成 KEY
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES", "BC");
System.out.println(keyGenerator.getProvider());
keyGenerator.init(new SecureRandom());
Key secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
// KEY 轉換
Key convertSecretKey = new SecretKeySpec(keyBytes, "AES");
// 加密
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
byte[] result = cipher.doFinal(str.getBytes());
// 解密
cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
System.out.println("BC AES Decrypt: " + new String(cipher.doFinal(result)));
return Hex.encodeHexString(result);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
PBE(Password Based Encryption)基於口令加密
PBE 演算法結合了訊息摘要演算法和對稱加密演算法的優點。
- 應用
1 JDK 的 PBE 實現
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import java.security.Key;
import java.security.SecureRandom;
public class SymmetricalEncryptionUtils {
public static String jdkPBE(String str) {
// 初始化鹽
SecureRandom random = new SecureRandom();
byte[] salt = random.generateSeed(8);
// 口令與金鑰
String password = "test";
PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray());
try {
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWITHMD5andDES");
System.out.println(factory.getProvider());
Key key = factory.generateSecret(pbeKeySpec);
// 加密
PBEParameterSpec pbeParameterSpec = new PBEParameterSpec(salt, 100);
Cipher cipher = Cipher.getInstance("PBEWITHMD5andDES");
cipher.init(Cipher.ENCRYPT_MODE, key, pbeParameterSpec);
byte[] result = cipher.doFinal(str.getBytes());
// 解密
cipher.init(Cipher.DECRYPT_MODE, key, pbeParameterSpec);
System.out.println("JDK PBE Decrypt: " + new String(cipher.doFinal(result)));
return Base64.encodeBase64String(result);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
2 Bouncy Castle 的 PBE 實現
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import java.security.Key;
import java.security.SecureRandom;
import java.security.Security;
public class SymmetricalEncryptionUtils {
public static String bcPBE(String str) {
// 初始化鹽
SecureRandom random =
相關推薦
Java 實現對稱加密
文章目錄
Java 實現對稱加密
DES(Data Encryption Standard)資料加密標準
1 JDK 的 DES 實現
2 Bouncy Castle 的 DES 實現
3DES(Tri
java實現對稱加密AES和DES的加密、解密
目前主流的加密方式有:1、對稱加密:AES、DES 2、非對稱加密:RSA、DSA。
本文主要講解java實現呼叫AES/DES加密演算法包,呼叫過程最精要的就是下面兩句話:
Cipher cipher = Cipher.getIn
JAVA實現RSA加密,非對稱加密演算法
RSA.java
package org.icesnow.jeasywx.util.security;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
用Java實現AES加密(轉)
密鑰 工具 mex 嚴格 keys 生產 ner for 創建 一)什麽是AES?
高級加密標準(英語:Advanced Encryption Standard,縮寫:AES),是一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。
那麽為什麽
JAVA實現DES加密實現詳解
ava util des算法 直接 print uri ret secure 過程
package util;
import java.security.SecureRandom;
import javax.crypto.spec.DESKeySpec;
import j
java實現md5加密
comm 代碼 inf 應用領域 ast center href 攻擊 字符串
java 非對稱加密RSA
init nco security stat deb 編碼 IT hal mex
package com.aarony.test;
import java.io.IOException;
import java.security.KeyFactory;
imp
**Java實現Base64加密**
package com.beiruan.test;
import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public clas
Linux初級:gpg實現對稱加密和公鑰加密
gpg實現對稱加密
1、對檔案加密(對dushan這個檔案加密)gpg -c dushan
2、對檔案進行解密,(對生成的dushan.gpg並輸出到檔案file.txt中,注意-o選線必須在前-d在選項在後)
gpg -o file.txt -d dushan.gpg
gpg實
條理清晰的入門:使用Java實現RSA加密解密
條理清晰的入門:使用Java實現RSA加密解密
什麼是RSA
使用Java
需要匯入的標頭檔案
生成公鑰、私鑰
進行加密解密
金鑰的儲存
密文的儲存、讀取
什麼是RSA
翻一下以前的密碼
用java實現簡易加密和解密
實現原理:
通過位運算的異或運算子“^”把字串與一個指定的值進行異或運算,從而改變字串中的每個字元的值,這樣就可以得到一個加密後的字串。傳送後再將加密後的字串通過源程式實現解
資料加解密基礎知識介紹,及Java實現Base64加密
加密流程涉及的一些關鍵詞:
明文:準備加密的資訊
加密:把明文處理為密文的過程
加密演算法:具體實現明文轉為密文的演算法
加密金鑰:通過加密演算法進行加密操作需要的金鑰
密文:被加密的明文
解密:將密文轉為明文的過程
解密演算法:具體實現密文轉為明文的演算法
解
Java非對稱加密演算法RSA
流程分析:
甲方構建金鑰對兒,將公鑰公佈給乙方,將私鑰保留。
甲方使用私鑰加密資料,然後用私鑰對加密後的資料簽名,傳送給乙方簽名以及加密後的資料;乙方使用公鑰、簽名來驗證待解密資料是否有效,如果有效使用公鑰對資料解密。
乙方使用公鑰加密資料,向甲方傳送經過加密後的資料
java的對稱加密演算法 AES -----加密和解密
背景
隨著對稱密碼的發展,DES資料加密標準演算法由於金鑰長度較小(56位),已經不適應當今分散式開放網路對資料加密安全性的要求,因此1997年NIST公開徵集新的資料加密標準,即AES[1]。經過三輪的篩選,比利時Joan Daeman和Vincent Rijmen提
JAVA實現RSA加密解密
RSA 工具類。提供加密,解密,生成金鑰對等方法。
RSA加密原理概述 :
RSA的安全性依賴於大數的分解,公鑰和私鑰都是兩個大素數(大於100的十進位制位)的函式。
據猜測,從一個金鑰和密文推斷出明文的難度等同於分解兩個大素數的積
金鑰的產生:
1.選
Java實現MD5加密與解密
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class TestMD5 {public static void Md5(String plainText){try { Me
Java實現Base64加密和解密
Base64是一種編碼格式,而不是演算法。
首先引入Base64類庫的maven依賴
<dependency>
<groupId>com.xiaoleilu</groupId>
<
JAVA 實現AES加密的兩種方法
寫在前面的話: 1.建議加密後將密文轉為16進位制的字串(便於觀看)。 2.以下的兩種加密的方法金鑰不限定長度。[java] view plain copy print?/** *AES加密解密工具類 *@author M-Y */ public clas
java 實現各種加密(MD5 ,SHA-1,SHA-256)
常用加密演算法通用方法:
package BinTest.bin;
import java.security.MessageDigest;
import java.security.NoSuchAl
Java實現DES加密解密演算法
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFact