Java 加密、解密PPT文档
- 格式:docx
- 大小:44.97 KB
- 文档页数:2
Java加密与解密方法详解1. 引言在当今数字化时代,保护数据的安全性成为了一项重要的任务。
无论是在个人使用还是企业应用中,数据的加密和解密都是必不可少的环节。
而Java作为一门广泛应用于软件开发的编程语言,其提供了丰富的加密和解密方法,本文将对Java中的加密与解密方法进行详细的介绍和分析。
2. 对称加密算法对称加密算法是指加密和解密使用相同的密钥的算法。
Java中常用的对称加密算法有DES、AES等。
其中,DES是一种较早期的对称加密算法,它使用56位的密钥对数据进行加密和解密。
而AES是一种更加安全和高效的对称加密算法,它使用128位、192位或256位的密钥对数据进行加密和解密。
在Java中,使用对称加密算法进行加密和解密的步骤如下:(1)生成密钥:通过密钥生成器(KeyGenerator)生成一个密钥(Key)。
(2)初始化加密/解密器:通过Cipher类的getInstance方法获取加密/解密器,并设置加密/解密模式和密钥。
(3)加密/解密数据:调用加密/解密器的方法对数据进行加密/解密操作。
3. 非对称加密算法非对称加密算法是指加密和解密使用不同的密钥的算法。
Java中常用的非对称加密算法有RSA、DSA等。
其中,RSA是一种基于大数因子分解的非对称加密算法,它使用公钥和私钥对数据进行加密和解密。
在Java中,使用非对称加密算法进行加密和解密的步骤如下:(1)生成密钥对:通过密钥对生成器(KeyPairGenerator)生成一个密钥对(KeyPair)。
(2)获取公钥和私钥:通过密钥对获取公钥和私钥。
(3)初始化加密/解密器:通过Cipher类的getInstance方法获取加密/解密器,并设置加密/解密模式和密钥。
(4)加密/解密数据:调用加密/解密器的方法对数据进行加密/解密操作。
4. 哈希算法哈希算法是一种将任意长度的数据映射为固定长度的数据的算法。
Java中常用的哈希算法有MD5、SHA-1、SHA-256等。
bytealgorithm加密string解密importimport java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import java.security.spec.InvalidKeySpecException;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.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;public class DESEncryptTest {private static final String DES_ALGORITHM = "DES";/*** DES加密* @param plainData* @param secretKey* @return* @throws Exception*/public String encryption(String plainData, String secretKey) throws Exception{Cipher cipher = null;try {cipher = Cipher.getInstance(DES_ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, generateKey(secretKey));} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();}catch(InvalidKeyException e){}try {// 为了防止解密时报javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher异常,// 不能把加密后的字节数组直接转换成字符串byte[] buf = cipher.doFinal(plainData.getBytes());return Base64Utils.encode(buf);} catch (IllegalBlockSizeException e) {e.printStackTrace();throw new Exception("IllegalBlockSizeException", e);} catch (BadPaddingException e) {e.printStackTrace();throw new Exception("BadPaddingException", e);}}/*** DES解密* @param secretData* @param secretKey* @return* @throws Exception*/public String decryption(String secretData, String secretKey) throws Exception{Cipher cipher = null;try {cipher = Cipher.getInstance(DES_ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, generateKey(secretKey));} catch (NoSuchAlgorithmException e) {e.printStackTrace();throw new Exception("NoSuchAlgorithmException", e);} catch (NoSuchPaddingException e) {e.printStackTrace();throw new Exception("NoSuchPaddingException", e);}catch(InvalidKeyException e){e.printStackTrace();throw new Exception("InvalidKeyException", e);}try {byte[] buf = cipher.doFinal(Base64Utils.decode(secretData.toCharArray()));return new String(buf);} catch (IllegalBlockSizeException e) {e.printStackTrace();throw new Exception("IllegalBlockSizeException", e);} catch (BadPaddingException e) {e.printStackTrace();throw new Exception("BadPaddingException", e);}}/*** 获得秘密密钥** @param secretKey* @return* @throws NoSuchAlgorithmException*/private SecretKey generateKey(String secretKey) throws NoSuchAlgorithmException{ SecureRandom secureRandom = new SecureRandom(secretKey.getBytes());// 为我们选择的DES算法生成一个KeyGenerator对象KeyGenerator kg = null;try {kg = KeyGenerator.getInstance(DES_ALGORITHM);} catch (NoSuchAlgorithmException e) {}kg.init(secureRandom);//kg.init(56, secureRandom);// 生成密钥return kg.generateKey();}public static void main(String[] a) throws Exception{String input = "cy11Xlbrmzyh:604:301:1353064296";String key = "37d5aed075525d4fa0fe635231cba447";DESEncryptTest des = new DESEncryptTest();String result = des.encryption(input, key);System.out.println(result);System.out.println(des.decryption(result, key));}static class Base64Utils {static private char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();static private byte[] codes = new byte[256];static {for (int i = 0; i < 256; i++)codes[i] = -1;for (int i = 'A'; i <= 'Z'; i++)codes[i] = (byte) (i - 'A');for (int i = 'a'; i <= 'z'; i++)codes[i] = (byte) (26 + i - 'a');for (int i = '0'; i <= '9'; i++)codes[i] = (byte) (52 + i - '0');codes['+'] = 62;codes['/'] = 63;}/*** 将原始数据编码为base64编码*/static public String encode(byte[] data) {char[] out = new char[((data.length + 2) / 3) * 4];for (int i = 0, index = 0; i < data.length; i += 3, index += 4) {boolean quad = false;boolean trip = false;int val = (0xFF & (int) data[i]);val <<= 8;if ((i + 1) < data.length) {val |= (0xFF & (int) data[i + 1]);trip = true;}val <<= 8;if ((i + 2) < data.length) {val |= (0xFF & (int) data[i + 2]);quad = true;}out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)];val >>= 6;out[index + 2] = alphabet[(trip ? (val & 0x3F) : 64)];val >>= 6;out[index + 1] = alphabet[val & 0x3F];val >>= 6;out[index + 0] = alphabet[val & 0x3F];}return new String(out);}/*** 将base64编码的数据解码成原始数据*/static public byte[] decode(char[] data) {int len = ((data.length + 3) / 4) * 3;if (data.length > 0 && data[data.length - 1] == '=')--len;if (data.length > 1 && data[data.length - 2] == '=')--len;byte[] out = new byte[len];int shift = 0;int accum = 0;int index = 0;for (int ix = 0; ix < data.length; ix++) {int value = codes[data[ix] & 0xFF];if (value >= 0) {accum <<= 6;shift += 6;accum |= value;if (shift >= 8) {shift -= 8;out[index++] = (byte) ((accum >> shift) & 0xff);}}}if (index != out.length)throw new Error("miscalculated data length!");return out;}}}KKKKkkkkKKKKKKKKKKKKKKK /*在java中调用sun公司提供的3DES加密解密算法时,需要使用到$JAVA_HOME/jre/lib/目录下如下的4个jar包:jce.jarsecurity/US_export_policy.jarsecurity/local_policy.jarext/sunjce_provider.jarJava运行时会自动加载这些包,因此对于带main函数的应用程序不需要设置到CLASSPATH环境变量中。
java 对字符串加密解密在实际应用中,常常会遇到对数据进行加密、解密的工作,如对密码数据的保护或者对网络传输的数据进行保护。
数据加密、解密需要非常复杂、高效的算法,所以通常对于一般的程序员是无法完成的工作。
加密解密算法分为两种:一是受限制的安全算法,即最初用于军方,对一些机密的数据进行加密,由于这种算法保密,所以使用率低。
二是非受限的安全算法,即基于密钥的算法,并且算法都是公开的,所以使用率高,如图5-1所示。
加密密钥解密密钥明文加密密文解密明文图5-1 加密与解密目前,常用的加密算法包括对称密钥加密算法(如DES、IDEA、3DES等),公开密钥加密算法(如RSA、ECC等)等。
下面我们通过DES对称密钥进行加密,其详细方法如下。
操作步骤:(1)分别导入security.Key、crypto.Cipher和crypto.KeyGenerator类包,并创建EncryptExample主类和主方法。
其中,security为安全框架提供类和接口,而key是所有密钥的顶层接口。
crypto.Cipher为加密操作提供类和接口,而KeyGenerator提供(对称)密钥生成器的功能。
将将字符串转化为一个字节数组。
然后,通过创建String对象,显示这个字节数组中的内容。
KeyGenerator对象。
而GenerateKey( )方法以重用一个对称算法实例使用不同的密用明文字符串计算密文,然后输出加密后的内容。
(7)执行代码,将显示出原明文内容,然后通过加密后生成乱码密文。
再通过密文,进行解密,并显示明白内容,如图5-2所示。
图5-2 加密与解密过程。
JAVA设置PowerPoint文档保护PowerPoint文档在工作中常用来向别人介绍独特的创意或想法,为了保证文档的高度安全性,不被他人浏览以及改动,就需要设置文档保护,包括设置访问密码、修改密码,解除密码和设置文档只读等操作。
下面将介绍如何通过Java设置PowerPoint文档保护。
文章要点:1.加密PPT2.修改密码3.解除密码4.设置文档只读工具使用●Free Spire.Presentation for Java 2.2.3 (免费版)●Intellij IDEA或EclipseJar包导入●方法1:通过官网下载jar包。
●方法2:通过maven库导入。
JAVA 代码示例1.加密PowerPoint文档。
开发者可直接使用encrypt方法并指定一个密码来加密文档,这样用户在打开文档时需要输入对应的密码才能对文档进行预览和编辑,很好地保证了文件的安全。
import com.spire.presentation.*;public class encrypt {public static void main(String[] args)throws Exception{//新建Presentation对象Presentation presentation = new Presentation();//加载文档presentation.loadFromFile("data/encrypt.pptx");//设置密码presentation.encrypt("test");//保存文档presentation.saveToFile("encrypt.ppt", FileFormat.PPT);}}结果:2.修改密码修改文档密码需先使用removeEncryption方法解除加密,再调用protect方法重新设置密码以保护文档。
import com.spire.presentation.*;public class setDocumentReadOnly {public static void main(String[] args) throws Exception {String inputFile ="data/encrypt_result.pptx";String outputFile="output/ChangePassword_result.pptx";// 新建Presentation 对象并加载文档Presentation presentation = new Presentation();presentation.loadFromFile(inputFile,FileFormat.PPTX_2010, "147258369");//修改密码presentation.removeEncryption();presentation.protect("new password");presentation.saveToFile(outputFile, FileFormat.PPTX_2010);presentation.dispose();}3.解密PowerPoint文档。
java中decrypt和encrypt方法在Java中,加密(encrypt)和解密(decrypt)是非常常见和重要的操作。
加密是将明文数据转换为密文数据,以保护数据的安全性。
而解密是将密文数据重新转换为明文数据,以便于使用和理解。
本文将介绍Java中的加密和解密方法,包括常见的加密算法和使用示例。
在Java中,加密和解密操作通常使用加密算法来完成。
常用的加密算法包括对称加密和非对称加密。
对称加密是一种使用同一个密钥进行加密和解密的算法。
常见的对称加密算法有DES(Data Encryption Standard)、AES(Advanced Encryption Standard)等。
其中,AES是目前最常用和最安全的对称加密算法。
对称加密的特点是速度快,但密钥的传输和管理相对较复杂。
非对称加密是一种使用两个不同的密钥进行加密和解密的算法,分别为公钥和私钥。
公钥用于加密数据,私钥用于解密数据。
常见的非对称加密算法有RSA(Rivest-Shamir-Adleman)、DSA(DigitalSignature Algorithm)等。
非对称加密的特点是安全性较高,但速度相对较慢。
下面是一些常用的加密和解密方法的示例:1.对称加密:对称加密的示例中,我们使用AES算法和密钥来加密和解密数据。
```javaimport javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import java.security.SecureRandom;public class SymmetricEncryptionExample {public static void main(String[] args) throws Exception { //生成AES密钥KeyGenerator keyGenerator =KeyGenerator.getInstance("AES");keyGenerator.init(128, new SecureRandom());SecretKey secretKey = keyGenerator.generateKey();//创建加密和解密的实例Cipher cipher = Cipher.getInstance("AES");//加密数据String plainText = "Hello, World!";cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte[] encryptedText =cipher.doFinal(plainText.getBytes());System.out.println("加密后的数据:" + newString(encryptedText));//解密数据cipher.init(Cipher.DECRYPT_MODE, secretKey);byte[] decryptedText = cipher.doFinal(encryptedText);System.out.println("解密后的数据:" + newString(decryptedText));}}```在上面的示例中,我们首先使用AES算法生成一个128位的密钥。
java接收文件加密解密方法
在Java中接收加密文件并进行解密可以通过多种方式实现。
下面我将从多个角度介绍几种常见的方法:
1. 使用对称加密算法:
可以使用Java的javax.crypto包中的类来实现对称加密算法,如AES。
首先,接收加密文件后,可以使用FileInputStream 读取文件内容,然后使用Cipher类进行解密操作,最后使用FileOutputStream将解密后的内容写入新文件。
2. 使用非对称加密算法:
如果发送方使用了公钥加密文件,接收方可以使用私钥进行解密。
可以使用Java的java.security包中的类来实现非对称加密算法,如RSA。
首先,接收加密文件后,可以使用PrivateKey类进行解密操作,最后使用FileOutputStream将解密后的内容写入新文件。
3. 使用第三方库:
除了Java自带的加密算法外,也可以使用第三方库来简化加密解密操作,例如Bouncy Castle或者Apache Commons Crypto 等。
这些库提供了更多的加密选项和更简单的API,可以更容易地实现文件的加密和解密操作。
无论使用哪种方法,都需要注意文件的安全传输和存储,以及密钥的安全管理。
另外,要确保在解密文件时处理可能出现的异常情况,如文件损坏或者密码错误等。
希望这些信息能够帮助你实现在Java中接收文件并进行加密解密的操作。
java-信息安全(⼗⼋)java加密解密,签名等总结0、概述 Java Cryptography Extension(JCE)是⼀组包,它们提供⽤于加密、密钥⽣成和协商以及 Message Authentication Code(MAC)算法的框架和实现。
它提供对对称、不对称、块和流密码的加密⽀持,它还⽀持安全流和密封的对象。
它不对外出⼝,⽤它开发完成封装后将⽆法调⽤。
在早期JDK版本中,由于受美国的密码出⼝条例约束,Java中涉及加解密功能的API被限制出⼝,所以Java中安全组件被分成了两部分:不含加密功能的JCA(Java Cryptography Architecture )和含加密功能的JCE(Java Cryptography Extension)。
jre\lib\security ⽬录下的 local_policy.jar 和 US_export_policy.jar 这两个⽂件起着⾄关重要的作⽤。
通常我们下载的jdk安装后,这两个⽂件都是2.4k左右,事实上⽆JCE限制的应该是5k左右。
在JDK1.1-1.3版本期间,JCE属于扩展包,仅供美国和加拿⼤的⽤户下载,JDK1.4+版本后,随JDK核⼼包⼀起分发。
⾸先要下载相应的jce版本。
JCE的API都在 javax.crypto 包下,核⼼功能包括:加解密、密钥⽣成(对称)、MAC⽣成、密钥协商。
类⽬详细密钥长度块长速度作⽤综合【推荐】地址编码类算法base64、base58将字符编码,⽅便传输记录等消息摘要散列(哈希)算法MD、SHA、RIPEMDTiger、Whirlpool、Gost3411将消息摘要化,⽅便唯⼀性⽐对等HAMC盐+哈希算法=综合对称加密DES:数据加密标准5664慢不安全, 不推荐注意,⼯作模式填充模式,3DES:密钥加长,多次叠加112、16864很慢中等安全, 适合加密较⼩的数据AES:ssh协议,多⽤于移动,⾼级128,192, 256128快安全Blowfish(4⾄56)*864快应该安全, 在安全界尚未被充分分析、论证RC2、RC440-102464很快安全性不明确基于⼝令加密PBE:基于⼝令加密可以额外加盐,使⽤⼝令+盐=实现内部对称加密⾮对称加密RSA⼀般公钥加密,私钥解密。
Java中的数据加密与解密数据加密与解密在现代信息安全中起着至关重要的作用。
Java作为一种广泛应用的编程语言,提供了丰富的工具和库来实现数据的加密和解密。
本文将介绍Java中常用的数据加密与解密的方法,包括对称加密和非对称加密。
一、对称加密对称加密是指使用相同的密钥进行数据的加密和解密。
Java中常用的对称加密算法有DES、AES等。
下面分别介绍这两种算法的使用方法。
1. DES加密与解密DES(Data Encryption Standard)是一种对称加密算法,使用相同的密钥进行加密和解密。
在Java中,可以使用javax.crypto包下的Cipher 类来实现DES加密和解密的功能。
具体代码如下:```javaimport javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;public class DESUtils {private static final String ALGORITHM = "DES";public static String encrypt(String data, String key) throws Exception {SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), ALGORITHM);Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, keySpec);byte[] encryptedData = cipher.doFinal(data.getBytes());return new String(encryptedData);}public static String decrypt(String encryptedData, String key) throws Exception {SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), ALGORITHM);Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, keySpec);byte[] decryptedData = cipher.doFinal(encryptedData.getBytes());return new String(decryptedData);}}```2. AES加密与解密AES(Advanced Encryption Standard)是一种高级的对称加密算法,相较于DES更为安全、高效。
Java 加密、解密PPT文档
文档加密常通过设置文档打开密码、启用文档编辑时的权限密码等方式;而解密则通过删除原有文档的密码或在此基础上重置新的密码。
以下文章内容,将通过Java程序来实现通过以上方式来加密、解密PPT文档。
使用工具:Free Spire.Presentation for Java(免费版)
Jar文件获取及导入:
方法1:通过官网获取jar文件包。
下载文件后,解压,并将lib文件夹下的Spire.Presentation.jar文件导入Java程序。
方法2:通过maven仓库安装导入。
Java代码示例
【示例1】加密PPT
import com.spire.presentation.*;
public class Encrypt {
public static void main(String[]args) throws Exception {
//加载测试文档
Presentation ppt = new Presentation();
ppt.loadFromFile("test.pptx");
//通过encrypt()加密时,即打开文档时需要输入密码
ppt.encrypt("123456");
//通过protect()加密时,即限制文档编辑,在进行文档编辑、打印时需要输入密码
ppt.protect("654321");
ppt.saveToFile("Encypted.pptx",FileFormat.PPTX_2013);
ppt.dispose();
}
}
文档打开时密码输入对话框效果:
选择是否启用编辑或只读:
【示例2】解密PPT
import com.spire.presentation.*;
public class Decrypt {
public static void main(String[]args)throws Exception{
//加载带密码的ppt文档
Presentation ppt = new Presentation();
ppt.loadFromFile("Encrypt.pptx",FileFormat.PPTX_2013,"123456");
//调用方法removeEncryption()移除密码
ppt.removeEncryption();
//若需要重置密码,在执行上一步代码步骤后,再调用encryp()方法重新加密文档ppt.encrypt("newpassword");
//保存
ppt.saveToFile("newencryped.pptx",FileFormat.PPTX_2013);
}
}
执行代码后,可查看文档密码解除效果或重置效果。
(本文完)。