javajce
❶ java中這個加密類com.sun.crypto.provider.SunJCE() 這個類需要sunjce_provider.jar
java中這個加密類com.sun.crypto.provider.SunJCE()報錯的解決辦法,有2種:
1、Window -> Preferences -> Java -> Compiler -> Errors/Warnings -> Deprecated and restricted API -> Forbidden reference (access rules) -> Warnings或者Ignore即可。
2、在工程中引入sunjce_provider.jar,這個包在jdk1.6.0_13\jre\lib\ext里
❷ JCA和JCE的區別與聯系
JCE是JCA(Java Cryptography Architecture)的一種擴展。
❸ 什麼是jce
Java Cryptography Extension (JCE)。 JCE的出口受到有關法律的限制
❹ java中這個加密類com.sun.crypto.provider.SunJCE() 這個類需要sunjce_provider.jar包,現在貌似沒有了
可以實現MD5的加密法
❺ 在文件解密時用到的UnlimitedJCEPolicyJDK7文件是幹嘛的我知道他是Java的加密框架但是具體
這里水現說的是 AES 對稱加密演算法.在沒有「無政策限制許可權文件」的情況下,AES 只能使用 128 位的密鑰,有了這個文件可以支持 192 和 256 位密鑰。
❻ Java怎麼寫加密的類庫
Java加密擴展(JCE, Java Cryptography Extension ) 是一組提供加密、密鑰生成、密碼協議和消息認證碼(MAC, Message Authentication Code )演算法的框架和介面
❼ (java加密解密)如何實現JCE介面的各種演算法
在Java的安全包中,包括了三部分內容:
1、JCA/JCE(Java Cryptography Architecture & JavaCryptography Extensions)
2、JSSE( Java Secure-Sockets Extension)
3、JAAS( Java Authentication & AuhorizationService)
在這里,將僅介紹加解密的實現。
Java 中的加解密的實現,是由JCA(Java Cryptography Architecture) 和JCE(Java Cryptography Extension)共同組成。 在JDK1.4之前,相關的包需要單獨下載和安裝。現在,Java加密擴展(JCE)已經成為Java SDK 1.4的核心組成部分。JCE是一組提供了加密框架並實現了一些加密,密鑰生成演算法和協議,消息認證碼(MAC)等演算法的Java包。
什麼是Provider?
JCA/JCE並不執行各種演算法,它們只是連接應用和實際演算法實現程序的一組介面。軟體開發商根據JCE介面,將各種演算法實現後,打包成一個Provider,可以動態地加到Java運行環境中。由於美國出口控制規定,JCA是可出口的(JCA和一個Sun的默認實現包括在Java2中),但是JCE對部分國家是限制出口的。因此,要實現一個完整的安全結構,就需要一個或多個第三方廠商提供的JCE產品,稱為安全提供者(Provider)。Provider是特定加密演算法的實現者,有的供應商提供的加密技術是免費的,有的不免費。這些廠商有IBM,Bouncy Castle和RSA。Sun也給出了實現自己的Provider時需要遵循一些約定。
在低版本JDK上JCE的安裝
1.靜態安裝
在安裝和使用JCE之前,你需要從 Sun Web site(這里是以暗中sun的提供者為例)獲得安裝包。JCE中已經辦函Sun自己的安全Provider - SunJCE,為了把SunJCE靜態的安裝到默認的Provider列表中,你需要修改安全屬性文件:
? <java-home>\jre\lib\security\java.security (Win32)
? <java-home>/jre/lib/security/java.security (UNIX)
假如你把JDK安裝在C:\jdk1.3,你需要編輯以下文件:
C:\jdk1.3\jre\lib\security\java.security
為了安裝SunJCE,你需要在以上文件中加入:
security.provider.n=com.sun.crypto.provider.SunJCE
把n用你加入的提供者的優先順序代替(注意:序號要保持遞增,不能跳過,但可以調整前後順序)。
代碼A,用於查看你安裝過的提供者的信息,結果在顯示清單B中列出,顯示Provider的能力,比如說可用的加密演算法。
代碼A: ProviderInformation.java
import java.security.Provider;
import java.security.Security;
import java.util.Set;
import java.util.Iterator;
public class ProviderInformation {
public static void main(String[] args) {
Provider[] providers = Security.getProviders();
for (int i = 0; i < providers.length; i++) {
Provider provider = providers[i];
System.out.println("Provider name: " + provider.getName());
System.out.println("Provider information: " + provider.getInfo());
System.out.println("Provider version: " + provider.getVersion());
Set entries = provider.entrySet();
Iterator iterator = entries.iterator();
while (iterator.hasNext()) {
System.out.println("Property entry: " + iterator.next());
}
}
}
}
顯示清單B:
ProviderInformation.java output
Provider name: SUN
Provider information: SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; JKS keystore)
Provider version: 1.2
Property entry: Alg.Alias.KeyFactory.1.2.840.10040.4.1=DSA
Property entry: Alg.Alias.Signature.1.2.840.10040.4.3=SHA1withDSA
Property entry: Alg.Alias.KeyPairGenerator.OID.1.2.840.10040.4.1=DSA
Property entry: Signature.SHA1withDSA KeySize=1024
Property entry: Signature.SHA1withDSA ImplementedIn=Software
動態安裝:
代碼C說明了如何在運行時動態載入Provider,要注意的是,當你用Security.addProvider(…)載入Provider時,它是對整個JVM環境都可用的。
代碼C: DynamicProvider.java
import java.security.Security;
public class DynamicProvider {
public static void main(String[] args) {
// This is all there is to it!
Security.addProvider(new com.sun.crypto.provider.SunJCE());
}
}
如前所述,當你安裝一個Provider時,你用n來指明此提供者的優先順序,但一個演算法的實例被調用時,JVM將按照提供的優先順序來在已經安裝的提供者中查找可用的實現,並使用他首先找到的可用演算法。你也可用在調用時加上附加參數來指明要在哪個提供者中尋找使用的演算法。
實現細節:
JCE API包含了大量的為實現安全特性的類和介面,首先,我們做一個DES對稱(Symmetric)加密的例子。
生成密鑰:
下面的代碼展示了如何使用密鑰生成器來生成密鑰。
代碼D: DESKeyGenerator.java
import javax.crypto.KeyGenerator;
import java.security.Key;
import java.security.NoSUChAlgorithmException;
import java.security.Security;
public class DESKeyGenerator {
public static void main(String[] args) {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
try {
KeyGenerator kg = KeyGenerator.getInstance("DES");
Key key = kg.generateKey();
System.out.println("Key format: " + key.getFormat());
System.out.println("Key algorithm: " + key.getAlgorithm());
}
catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
為了生成密鑰,首先要初始化密鑰生成器,這一步可以通過調用KeyGenerator類的靜態方法getInstance來實現。所用的DES演算法沒有模式和填充模型。你同樣可以(在getInstance(""))傳入DES/ECB/PKCS5Padding來指明模式(ECB)和填充模式(PKCS5Padding),也可以傳入另外一個參數指明所用的Provider,不過這是可選的。在獲得密鑰生成器的實例後,通過調用其generateKey()方法,我們就可以獲得一個密鑰。
生成密碼(Cipher):
生成Cipher的過程跟生成密鑰類似,需要調用Cipher類的getInstance方法,參數要跟生成密鑰時用的參數保持一致。
代碼E說明了如果操作。
代碼E: DESCipherGenerator.java
import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import java.security.Security;
import java.security.NoSuchAlgorithmException;
public class DESCipherGenerator {
public static void main(String[] args) {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
try{
Cipher cipher = Cipher.getInstance("DES");
System.out.println("Cipher provider: " + cipher.getProvider());
System.out.println("Cipher algorithm: " + cipher.getAlgorithm());
}catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}catch (NoSuchPaddingException e) {
e.printStackTrace();
}
}
}
加解密數據
加密是對位元組的,所以保密行比較高,當你准備好了密鑰和Cipher時,你已經做好了加密的准備。要注意的是,同一個演算法要用相同的密鑰和密碼(Cipher)。比如說,你不能用DESsede的密鑰,用DES的密碼。Cipher對象用同一個方法對數據進行加密和解密,所有你要首先初時化,讓他知道你要干什麼:
cipher.init(Cipher.ENCRYPT_MODE, key);
這就將初始化Cipher類,以准備好去加密數據。最簡單的加密方法就是對傳入的位元組數組調用doFinal方法:
byte[] data = 「Hello World!」.getBytes();
byte[] result = cipher.doFinal(data);
以下是詳細的代碼
代碼F: DESCryptoTest.java
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.BadPaddingException;
import java.security.Key;
import java.security.Security;
import java.security.NoSuchAlgorithmException;
import java.security.InvalidKeyException;
public class DESCryptoTest {
public static void main(String[] args) {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
try {
KeyGenerator kg = KeyGenerator.getInstance("DES");
Key key = kg.generateKey();
Cipher cipher = Cipher.getInstance("DES");
byte[] data = "Hello World!".getBytes();
System.out.println("Original data : " + new String(data));
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal(data);
System.out.println("Encrypted data: " + new String(result));
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] original = cipher.doFinal(result);
System.out.println("Decrypted data: " + new String(original));
}catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}catch (NoSuchPaddingException e) {
e.printStackTrace();
}catch (InvalidKeyException e) {
e.printStackTrace();
}catch (IllegalStateException e) {
e.printStackTrace();
}catch (IllegalBlockSizeException e) {
e.printStackTrace();
}catch (BadPaddingException e) {
e.printStackTrace();
}
}
}
❽ Java加密是怎麼個思想,請具體一點,新手
找到一個實例, 參考看看
import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; 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; public class EncrypDES { //KeyGenerator 提供對稱密鑰生成器的功能,支持各種演算法 private KeyGenerator keygen; //SecretKey 負責保存對稱密鑰 private SecretKey deskey; //Cipher負責完成加密或解密工作 private Cipher c; //該位元組數組負責保存加密的結果 private byte[] cipherByte; public EncrypDES() throws NoSuchAlgorithmException, NoSuchPaddingException{ Security.addProvider(new com.sun.crypto.provider.SunJCE()); //實例化支持DES演算法的密鑰生成器(演算法名稱命名需按規定,否則拋出異常) keygen = KeyGenerator.getInstance("DES"); //生成密鑰 deskey = keygen.generateKey(); //生成Cipher對象,指定其支持的DES演算法 c = Cipher.getInstance("DES"); } /** * 對字元串加密 * * @param str * @return * @throws InvalidKeyException * @throws IllegalBlockSizeException * @throws BadPaddingException */ public byte[] Encrytor(String str) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException { // 根據密鑰,對Cipher對象進行初始化,ENCRYPT_MODE表示加密模式 c.init(Cipher.ENCRYPT_MODE, deskey); byte[] src = str.getBytes(); // 加密,結果保存進cipherByte cipherByte = c.doFinal(src); return cipherByte; } /** * 對字元串解密 * * @param buff * @return * @throws InvalidKeyException * @throws IllegalBlockSizeException * @throws BadPaddingException */ public byte[] Decryptor(byte[] buff) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException { // 根據密鑰,對Cipher對象進行初始化,DECRYPT_MODE表示加密模式 c.init(Cipher.DECRYPT_MODE, deskey); cipherByte = c.doFinal(buff); return cipherByte; } /** * @param args * @throws NoSuchPaddingException * @throws NoSuchAlgorithmException * @throws BadPaddingException * @throws IllegalBlockSizeException * @throws InvalidKeyException */ public static void main(String[] args) throws Exception { EncrypDES de1 = new EncrypDES(); String msg ="郭XX-搞笑相聲全集"; byte[] encontent = de1.Encrytor(msg); byte[] decontent = de1.Decryptor(encontent); System.out.println("明文是:" + msg); System.out.println("加密後:" + new String(encontent)); System.out.println("解密後:" + new String(decontent)); } }