Java 加密、解密Word文档
JAVA实现古典置换密码的加密解密
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;public class zhihuan {public static void main(String args[]) throws IOException{System.out.println("请您输入需要的服务,1为加密,2为解密");BufferedReader br=new BufferedReader(new InputStreamReader(System.in));int Choice=Integer.parseInt(br.readLine());if(Choice==1){System.out.println("您进入了加密程序");System.out.print("请输入您需要加密的明文:");String MingWen=br.readLine();System.out.print("请输入加密秘钥:");String key=br.readLine();jiami(MingWen,key);Choice=2;}if(Choice==2){System.out.println("您进入了解密程序");System.out.print("请输入您需要解密的密文:");String MiWen=br.readLine();System.out.print("请输入解密秘钥:");String key2=br.readLine();jiemi(MiWen,key2);System.exit(0);}else{System.out.println("输入错误,请重新输入,1为加密,2为解密:\n");System.exit(0);}}static void jiami(String mingwen,String key){int hang=(int)Math.ceil((double)mingwen.length()/(double)key.length());//行数int lie=key.length();//列数char[][] juzhen=new char[hang][lie];//定义矩阵存储明文int temp=0;for(int i=0;i<hang;i++)//嵌套循环将明文存入矩阵{for(int j=0;j<lie;j++){if(temp<mingwen.length()){juzhen[i][j]=mingwen.charAt(temp);temp++;}}}int[] key_xu=new int[key.length()];//此数组存储秘钥字母顺序for(int i=0;i<key.length();i++)//将秘钥转ASCII码{key_xu[i]=(int)key.charAt(i);}Arrays.sort(key_xu); //对秘钥ASCII码进行排序int[] a=new int[key.length()];//此数组用于记录转换映射for(int i=0;i<key.length();i++)//利用嵌套循环在数组a中记录转换映射关系for(int j=0;j<key.length();j++){if( (int)key.charAt(i)==key_xu[j]){a[i]=j;}}char[][] mima=new char[hang][lie];//定义第一次转置后的密码矩阵for(int j=0;j<lie;j++)//开始第一次转置for(int i=0;i<hang;i++){mima[i][j]=juzhen[i][a[j]];}System.out.print("加密后密码:");for(int j=0;j<lie;j++)//第二次转置输出结果{for(int i=0;i<hang;i++){System.out.print(mima[i][a[j]]);}}}static void jiemi(String miwen,String key){int hang=(int)Math.ceil((double)miwen.length()/(double)key.length());//int lie=key.length();//char[][] juzhen=new char[hang][lie];int temp=0;for(int j=0;j<lie;j++)//嵌套循环将明文存入矩阵{for(int i=0;i<hang;i++){if(temp<miwen.length()){juzhen[i][j]=miwen.charAt(temp);temp++;}}}int[] key_xu=new int[key.length()];//此数组存储秘钥字母顺序for(int i=0;i<key.length();i++)//将秘钥转ASCII码{key_xu[i]=(int)key.charAt(i);}Arrays.sort(key_xu); //对秘钥ASCII码进行排序int[] a=new int[key.length()];//此数组用于记录转换映射for(int i=0;i<key.length();i++)//利用嵌套循环在数组a中记录转换映射关系for(int j=0;j<key.length();j++){if( (int)key.charAt(i)==key_xu[j]){a[i]=j;}}char[][] ming=new char[hang][lie];//定义第一次转置后的密码矩阵for(int j=0;j<lie;j++)//开始第一次转置for(int i=0;i<hang;i++){ming[i][a[j]]=juzhen[i][j];}char[][] mingwen=new char[hang][lie];for(int j=0;j<lie;j++)//开始第2次转置for(int i=0;i<hang;i++){mingwen[i][a[j]]=ming[i][j];}System.out.println("解密结果为:");for(int i=0;i<hang;i++){for(int j=0;j<lie;j++){System.out.print(mingwen[i][j]);}}}}。
java 密码加密解密方法
java 密码加密解密方法在Java中,密码的加密和解密可以通过多种方式实现。
其中,常用的方法包括使用MessageDigest类进行加密,以及使用对称加密和非对称加密算法进行加密和解密。
一种常见的密码加密方法是使用MessageDigest类进行加密。
这可以通过以下步骤实现:首先,将密码转换为字节数组。
然后,使用MessageDigest类的getInstance方法获取特定的加密算法实例,例如SHA-256或MD5。
接下来,使用update方法将密码的字节数组传递给MessageDigest实例。
最后,使用digest方法获得加密后的字节数组,并将其转换为十六进制字符串或其他格式存储在数据库或其他地方。
另一种常见的方法是使用对称加密算法,例如AES或DES。
这些算法使用相同的密钥进行加密和解密。
在Java中,可以使用javax.crypto包中的类来实现对称加密。
通常,需要生成一个密钥并将其存储在安全的地方,然后使用该密钥对密码进行加密和解密。
此外,还可以使用非对称加密算法,例如RSA。
这种方法使用公钥对数据进行加密,然后使用私钥进行解密。
在Java中,可以使用java.security包中的类来实现非对称加密。
无论使用哪种方法,都需要注意密码安全的问题。
例如,密钥的安全存储和管理,以及密码传输过程中的安全性。
另外,还需要考虑密码的哈希加盐等技术来增加密码的安全性。
总之,在Java中实现密码的加密和解密有多种方法,开发人员可以根据实际需求和安全要求选择合适的加密算法和实现方式。
希望这些信息能够帮助你更好地理解Java中密码加密解密的方法。
使用Java实现安全性加密与解密
使用Java实现安全性加密与解密在当今信息时代,数据的安全性越来越受到重视。
无论是个人的隐私信息还是企业的商业机密,都需要得到有效的保护。
而加密与解密技术就是一种常用的保护数据安全的手段。
本文将介绍如何使用Java语言实现安全性加密与解密。
1. 加密与解密的基本概念加密是将明文转换为密文的过程,而解密则是将密文转换回明文的过程。
加密算法通常使用一个密钥,密钥用于控制加密过程的转换规则,只有拥有正确的密钥才能进行解密。
常见的加密算法有对称加密算法和非对称加密算法。
对称加密算法使用相同的密钥进行加密和解密,速度较快,但密钥的传输和管理相对困难。
非对称加密算法使用一对密钥,公钥用于加密,私钥用于解密,安全性较高,但速度较慢。
2. 使用Java实现对称加密Java提供了多种对称加密算法的实现,如DES、AES等。
下面以AES算法为例,介绍如何使用Java实现对称加密。
首先,需要导入Java加密扩展(JCE)的包。
在Java 8及以上版本中,JCE已经被默认包含在JDK中,无需额外导入。
接下来,可以使用以下代码进行AES加密:```javaimport javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;public class AESUtil {private static final String ALGORITHM = "AES";public static String encrypt(String plainText, String key) throws Exception {KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);keyGenerator.init(128);SecretKey secretKey = keyGenerator.generateKey();byte[] enCodeFormat = secretKey.getEncoded();SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, ALGORITHM);Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());return Base64.getEncoder().encodeToString(encryptedBytes);}public static String decrypt(String encryptedText, String key) throws Exception {KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);keyGenerator.init(128);SecretKey secretKey = keyGenerator.generateKey();byte[] enCodeFormat = secretKey.getEncoded();SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, ALGORITHM);Cipher cipher = Cipher.getInstance(ALGORITHM);cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);byte[] encryptedBytes = Base64.getDecoder().decode(encryptedText);byte[] decryptedBytes = cipher.doFinal(encryptedBytes);return new String(decryptedBytes);}}```以上代码中,`encrypt`方法用于对明文进行加密,`decrypt`方法用于对密文进行解密。
java对压缩文件进行加密,winrar和好压直接输入解密密码来使用
java对压缩⽂件进⾏加密,winrar和好压直接输⼊解密密码来使⽤<!-- https:///artifact/net.lingala.zip4j/zip4j --><dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.2</version></dependency>或者下载zip4j-1.3.2.jar以下是对⽂件压缩的⽅法,这⾥只是单个⽂件压缩,多个变通⼀下就可以。
package com.yggdrasill.foura.web.sysadmin.backup.service;import net.lingala.zip4j.core.ZipFile;import net.lingala.zip4j.exception.ZipException;import net.lingala.zip4j.model.ZipParameters;import net.lingala.zip4j.util.Zip4jConstants;import java.io.*;import java.util.ArrayList;public class ZipComplexCipherUtil {/*** 加密1,winrar,好压2345可直接输⼊密码解压* 根据filepath读取⽂件并加密返回*/public static void zipFileAndEncrypt(String filePath,String zipFileName,String password) {try {ZipParameters parameters = setParam(password);//压缩⽂件,并⽣成压缩⽂件ArrayList<File> filesToAdd = new ArrayList<File>();File file = new File(filePath);filesToAdd.add(file);ZipFile zipFile = new ZipFile(zipFileName);zipFile.addFiles(filesToAdd, parameters);//this line does worksSystem.err.println("end");} catch (ZipException e) {e.printStackTrace();}}/*** 加密1,winrar,好压2345可直接输⼊密码解压*/public static void zipFileStream(InputStream is,String zipFileName,String password) {try {ZipParameters parameters = setParam(password);//addStream,多设置两个参数,缺⼀不可parameters.setFileNameInZip("yourfilename.xlsx");parameters.setSourceExternalStream(true);ZipFile zipFile = new ZipFile(zipFileName);zipFile.addStream(is, parameters);} catch (ZipException e) {e.printStackTrace();}}public static ZipParameters setParam(String password){//设置压缩⽂件参数ZipParameters parameters = new ZipParameters();//设置压缩⽅法parameters.setCompressionMethod(P_DEFLATE);//设置压缩级别parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);//设置压缩⽂件是否加密parameters.setEncryptFiles(true);//设置aes加密强度parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);//设置加密⽅法parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);//设置密码parameters.setPassword(password.toCharArray());return parameters;}public static void main(String[] args) throws Exception {try{long l1 = System.currentTimeMillis();////加密,addFile// ZipComplexCipherUtil.zipFileAndEncrypt("D:\\aaa\\zhmm_db.xlsx","D:\\aaa\\ccc.zip","123");// 加密,addStreamInputStream in = new FileInputStream("D:\\aaa\\zhmm_db.xlsx"); ZipComplexCipherUtil.zipFileStream(in,"D:\\aaa\\ccc.zip","123");long l2 = System.currentTimeMillis();System.out.println((l2 - l1) + "毫秒.");System.out.println(((l2 - l1) / 1000) + "秒.");}catch(Exception ex){ex.printStackTrace();}}}。
java 文件锁 用法
java 文件锁用法Java 文件锁(File Lock)的用法引言:在Java编程中,文件锁(File Lock)是一种机制,用于控制对文件的并发访问,以避免多个线程或进程同时对同一个文件进行读写操作而引发的数据竞争和不一致问题。
它可以确保在一个时间点只有一个线程或进程可以对文件进行访问,并且其他线程或进程需要等待直到文件被释放。
本文将介绍Java中文件锁的用法,包括文件锁的基本概念、实现文件锁的不同方法和如何正确使用文件锁来保护文件的并发访问。
一、文件锁的基本概念1. 文件锁的定义文件锁(File Lock)是一种独占锁(Exclusive Lock),它允许一个进程在同一时间内独占地对文件进行读写操作。
当一个进程获取了文件锁后,其他进程将无法获取该锁,直到文件锁被释放。
2. 文件锁的类型Java提供了两种类型的文件锁:共享锁(Shared Lock)和独占锁(Exclusive Lock)。
共享锁允许多个进程同时对文件进行读操作,但不允许写操作;独占锁则只允许一个进程对文件进行读写操作。
在实际应用中,可以根据需要选择使用适合的锁类型。
二、实现文件锁的不同方法1. 使用FileChannel实现文件锁Java的NIO(New IO)库提供了FileChannel类,该类可以用于实现文件锁。
通过FileChannel的lock方法可以获取文件的独占锁或共享锁,使用tryLock方法可以尝试获取锁并返回锁的状态。
示例代码:获取文件的FileChannel对象FileChannel channel = new RandomAccessFile("file.txt", "rw").getChannel();获取文件的独占锁FileLock lock = channel.lock();或者获取文件的共享锁FileLock lock = channel.lock(0, Long.MAX_VALUE, true);尝试获取文件的独占锁,并返回锁的状态FileLock lock = channel.tryLock();2. 使用FileLock接口实现文件锁Java的NIO库还提供了FileLock接口,通过该接口可以实现对文件的锁定和解锁操作。
Java加解密
Java加解密⼀、概述 Jasypt 这个Java类包为开发⼈员提供⼀种简单的⽅式来为项⽬增加加密功能,包括:密码Digest认证,⽂本和对象加密,集成hibernate,Spring Security(Acegi)来增强密码管理。
Jasypt是⼀个Java库,可以使开发者不需太多操作来给Java项⽬添加基本加密功能,⽽且不需要知道加密原理。
根据Jasypt⽂档,该技术可⽤于加密任务与应⽤程序,例如加密密码、敏感信息和数据通信、创建完整检查数据的sums. 其他性能包括⾼安全性、基于标准的加密技术、可同时单向和双向加密的加密密码、⽂本、数字和⼆进制⽂件。
Jasypt也可以与Acegi Security整合也即Spring Security。
Jasypt亦拥有加密应⽤配置的集成功能,⽽且提供⼀个开放的API从⽽任何⼀个Java Cryptography Extension都可以使⽤Jasypt。
Jasypt还符合RSA标准的基于密码的加密,并提供了⽆配置加密⼯具以及新的、⾼可配置标准的加密⼯具。
1、该开源项⽬可⽤于加密任务与应⽤程序,例如加密密码、敏感信息和数据通信 2、还包括⾼安全性、基于标准的加密技术、可同时单向和双向加密的加密密码、⽂本、数字和⼆进制⽂件。
3、Jasypt还符合RSA标准的基于密码的加密,并提供了⽆配置加密⼯具以及新的、⾼可配置标准的加密⼯具。
4、加密属性⽂件(encryptable properties files)、Spring work集成、加密Hibernate数据源配置、新的命令⾏⼯具、URL加密的Apache wicket集成以及升级⽂档。
5、Jasypt也可以与Acegi Security整合也即Spring Security。
Jasypt亦拥有加密应⽤配置的集成功能,⽽且提供⼀个开放的API从⽽任何⼀个Java Cryptography Extension都可以使⽤Jasypt。
Java解析word文档
Java解 析 word文 档 背景 在互联网教育行业,做内容相关的项目经常碰到的一个问题就是如何解析word文档。 因为系统如果无法智能的解析word,那么就只能通过其他方式手动录入word内容,效率低下,而且人工成本和录入出错率都较高。 疑难点 word解析可以预见的困难主要有以下几个方面: word 结构问题 —— word不开源,且含有很多非文本内容,比如图表,而已知的常规方法只能解析纯文本内容,所以如果不知道word内部 层级结构,解析将难以进行。 word 公式问题 —— word公式来源并非单一,可能是用MathType插件生成的latex公式,也可能是用word自带公式编辑器生成的公式,还有 可能公式部分手敲,部分使用搜狗输入法或者其它编辑器输入。不同来源处理方式是否一样?且能否有效读取文档各种上下脚标?方便后 期展示? word 非文本问题 —— word含有很多的非文本内容,比如图表。来源也多样,图表可能是用word自带的画图工具生成的,也有可能是复制 粘贴的,不同来源解析方式是否一样?且读取的时候是否能有效获取图片的位置及大小信息?方便文档内容后期在PC端和移动端展示。无 论最终方案是什么,肯定是将所有的且需要的非文本信息转换为文本信息。 word 版本问题 —— word有03、07等好几个版本,还有WPS版本,解析是否要全部兼容?后缀名有docx和doc,是否全部兼容?当然,前 提是已经成功解析一种类型。 word 规范问题 —— 有些word可能是早期制作的,返工代价太大,所以格式内容多样化。而且就算制定word格式规范,新制作的word也无 法保证格式一定正确,除非是程序自动生成的文档。举个例子,试题的题序,肉眼无法区分的格式就有好几种。程序只可能尽量覆盖绝大 部分情况,考虑的情况越多,解析正确率越高,当然程序也更复杂。
Java使用数字证书加密文件(含代码)
JA V A 使用数字证书加密解密文件总结目录1.编写目的 (3)2.JA V A生产数字证书 (4)2.1.1 keystore(JKS) 的生成 (4)2.1.2 导出公钥 (5)3.使用JKS私钥加密文件 (5)4.转换为PFX格式私钥 (6)5.使用PFX加密文件 (7)6 源代码 (8)6.1 用到的JAR包 (8)6.2 示例代码 (8)6.2.1 Test.java (8)6.2.2 RsaUtil.java (10)6.2.3 Base64.java (19)7.结束语 (26)1.编写目的学习RSA算法,读取数字证书中的私钥对文件进行加密,使用数字证书的公钥解密,这种方式就是RSA算法.自己对RSA算法的理解:⏹私钥加密公钥解密:如果用私钥对文件加密,发给别人,别人用我公布的公钥进行解密,实现这个文件就是我本人制作的,不是别人做的.⏹公钥加密私钥解密:如果别人用我的公钥加密文件,那么只能我一个人看,只有使用我的私钥进行解密,私钥一定是不能告诉其他人的.本文讲解如何用JKS私钥对文件进行加密,用对于CRT公钥进行解密,将JKS私钥转换为PFX格式私钥,并用PFX私钥对文件进行加密解密Jks:是JA V A的keytools证书工具支持的证书私钥格式pfx:是微软支持的私钥格式⏹2.JAVA生产数字证书为了实现数字证书加密文件,我们首先要制作几个数字证书,如果你已经有了pfx格式的数字证书并且知道其密码,以及对应crt或者cer格式的公钥证书则跳过本章.2.1 keytool 创建数字证书Keytool是一个Java数据证书的管理工具,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:⏹密钥实体(Key entity):密钥(secret key)又或者是私钥⏹配对公钥(采用非对称加密):可信任的证书实体(trusted certificate entries),只包含公钥2.1.1 keystore(JKS) 的生成●分阶段生成:命令格式:keytool -genkey -alias yushan(别名) -keypass yushan(别名密码) -keyalg RSA(算法) -keysize 1024(密钥长度) -validity 365(有效期,天单位) -keystore e:\yushan.keystore(指定生成证书的位置和证书名称) -storepass 123456(获取keystore信息的密码);示例:1)cmd下进入java/bin2)输入命令keytool -genkey -alias myalias-keypass 123456-keyalg RSA-keysize 1024 -validity 365 -keystore d: \myalias.keystore -storepass 123456●一次性生成:keytool -genkey -alias yushan -keypass yushan -keyalg RSA -keysize 1024 -validity 365 -keystore e:\yushan.keystore -storepass 123456 -dname "CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)";(中英文即可)无例图2.1.2 导出公钥命令:keytool -export -alias myalias -keystore d:\myalias.keystore -file d:\myalias.crt -storepass 123456创建结果:3.使用JKS私钥加密文件//工具类RSAUtil rsa = new RSAUtil();//从jks私钥中获取私钥加密串PrivateKey priKeyFromKs = rsa.getPriKeyFromKS("d:\\myalias.keystore","123456", "myalias", "123456");//从jks私钥中获取公钥解密串PublicKey pubKeyFromKS = rsa.getPubKeyFromKS("d:\\myalias.keystore", "123456", "myalias");//从crt公钥中获取公钥解密串PublicKey pubKeyFromCrt = rsa.getPubKeyFromCRT("d:\\myalias.crt");//用私钥串加密rsa.encryptWithPrv("d:\\file.xml",priKeyFromKs,"d:\\file_encWithKSPri.xml", true);//用jks公钥串解密rsa.decryptWithPub("d:\\file_encWithKSPri.xml", pubKeyFromKS, true,"d:\\file_encWithKSPri_decKs.xml");//用crt公钥串解密rsa.decryptWithPub("d:\\file_encWithKSPri.xml", pubKeyFromCrt, true, "d:\\file_encWithKSPri_decCrt.xml");4.转换为PFX格式私钥如果你已经有了pfx格式的数字证书并且知道其密码,以及对应crt或者cer格式的公钥证书则跳过本章.4.1 转换工具转换工具我使用的是kestore-export下载kestore-export.rar 请百度搜索,我也会往CSDN上上传,请直接搜索kestore-export.rar。
java常用加密和解密工具类EncryptUtil.java
java常⽤加密和解密⼯具类EncryptUtil.java 1package cn.util;23import java.io.UnsupportedEncodingException;4import java.security.MessageDigest;5import java.security.NoSuchAlgorithmException;6import java.security.SecureRandom;78import javax.crypto.Cipher;9import javax.crypto.SecretKey;10import javax.crypto.SecretKeyFactory;11import javax.crypto.spec.DESKeySpec;1213/**14 * 加密⼯具类15 *16 * md5加密出来的长度是32位17 *18 * sha加密出来的长度是40位19 *20 * @author伍⽟林21 *22*/23public final class EncryptUtil {2425private static final String PASSWORD_CRYPT_KEY = "88444488";2627private final static String DES = "DES";2829/**30 * ⼆次加密先sha-1加密再⽤MD5加密31 *32 * @param src33 * @return34*/35public final static String md5AndSha(String src) {36return md5(sha(src));37 }3839/**40 * ⼆次加密先MD5加密再⽤sha-1加密41 *42 * @param src43 * @return44*/45public final static String shaAndMd5(String src) {46return sha(md5(src));47 }4849/**50 * md5加密51 *52 * @param src53 * @return54*/55public final static String md5(String src) {56return encrypt(src, "md5");57 }5859/**60 * sha-1加密61 *62 * @param src63 * @return64*/65public final static String sha(String src) {66return encrypt(src, "sha-1");67 }6869/**70 * md5或者sha-1加密71 *72 * @param src73 * 要加密的内容74 * @param algorithmName75 * 加密算法名称:md5或者sha-1,不区分⼤⼩写76 * @return77*/78private final static String encrypt(String src, String algorithmName) {79if (src == null || "".equals(src.trim())) {80throw new IllegalArgumentException("请输⼊要加密的内容");81 }82if (algorithmName == null || "".equals(algorithmName.trim())) {83 algorithmName = "md5";84 }85 String encryptText = null;86try {87 MessageDigest m = MessageDigest.getInstance(algorithmName);88 m.update(src.getBytes("UTF8"));89byte s[] = m.digest();90// m.digest(src.getBytes("UTF8"));91return hex(s);92 } catch (NoSuchAlgorithmException e) {93 e.printStackTrace();94 } catch (UnsupportedEncodingException e) {95 e.printStackTrace();96 }97return encryptText;98 }99100/**101 * 密码解密102 *103 * @param data104 * @return105 * @throws Exception106*/107public final static String decrypt(String src) {108try {109return new String(decrypt(hex2byte(src.getBytes()), PASSWORD_CRYPT_KEY.getBytes())); 110 } catch (Exception e) {111 }112return null;113 }114115/**116 * 密码加密117 *118 * @param password119 * @return120 * @throws Exception121*/122public final static String encrypt(String src) {123try {124return byte2hex(encrypt(src.getBytes(), PASSWORD_CRYPT_KEY.getBytes()));125 } catch (Exception e) {126 }127return null;128 }129130/**131 * 加密132 *133 * @param src134 * 数据源135 * @param key136 * 密钥,长度必须是8的倍数137 * @return返回加密后的数据138 * @throws Exception139*/140private static byte[] encrypt(byte[] src, byte[] key) throws Exception {141// DES算法要求有⼀个可信任的随机数源142 SecureRandom sr = new SecureRandom();143// 从原始密匙数据创建DESKeySpec对象144 DESKeySpec dks = new DESKeySpec(key);145// 创建⼀个密匙⼯⼚,然后⽤它把DESKeySpec转换成⼀个SecretKey对象146 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);147 SecretKey securekey = keyFactory.generateSecret(dks);148// Cipher对象实际完成加密操作149 Cipher cipher = Cipher.getInstance(DES);150// ⽤密匙初始化Cipher对象151 cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);152// 现在,获取数据并加密正式执⾏加密操作153return cipher.doFinal(src);154 }155156/**157 * 解密158 *159 * @param src160 * 数据源161 * @param key162 * 密钥,长度必须是8的倍数163 * @return返回解密后的原始数据164 *165 * @throws Exception166*/167private final static byte[] decrypt(byte[] src, byte[] key) throws Exception {168// DES算法要求有⼀个可信任的随机数源169 SecureRandom sr = new SecureRandom();170// 从原始密匙数据创建⼀个DESKeySpec对象171 DESKeySpec dks = new DESKeySpec(key);172// 创建⼀个密匙⼯⼚,然后⽤它把DESKeySpec对象转换成⼀个SecretKey对象173 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);174 SecretKey securekey = keyFactory.generateSecret(dks);175// Cipher对象实际完成解密操作176 Cipher cipher = Cipher.getInstance(DES);177// ⽤密匙初始化Cipher对象178 cipher.init(Cipher.DECRYPT_MODE, securekey, sr);179// 现在,获取数据并解密正式执⾏解密操作180return cipher.doFinal(src);181 }182183private final static byte[] hex2byte(byte[] b) {184if ((b.length % 2) != 0)185throw new IllegalArgumentException("长度不是偶数");186byte[] b2 = new byte[b.length / 2];187for (int n = 0; n < b.length; n += 2) {188 String item = new String(b, n, 2);189 b2[n / 2] = (byte) Integer.parseInt(item, 16);190 }191return b2;192 }193194/**195 * ⼆⾏制转字符串196 *197 * @param b198 * @return199*/200private final static String byte2hex(byte[] b) {201 String hs = "";202 String stmp = "";203for (int n = 0; n < b.length; n++) {204 stmp = (ng.Integer.toHexString(b[n] & 0XFF));205if (stmp.length() == 1)206 hs = hs + "0" + stmp;207else208 hs = hs + stmp;209 }210return hs.toUpperCase();211 }212213/**214 * 返回⼗六进制字符串215 *216 * @param arr217 * @return218*/219private final static String hex(byte[] arr) {220 StringBuffer sb = new StringBuffer();221for (int i = 0; i < arr.length; ++i) {222 sb.append(Integer.toHexString((arr[i] & 0xFF) | 0x100).substring(1, 3)); 223 }224return sb.toString();225 }226227 }。
java国密加密与解密流程
java国密加密与解密流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 引入国密相关的依赖库在 Java 项目中,需要引入国密相关的依赖库,例如 Bouncy Castle 库。
java密码加密解密方法
Java密码加密解密方法一、引言在计算机系统中,信息安全是至关重要的一环。
其中,密码加密和解密是最常见的安全措施之一。
Java作为一种广泛使用的编程语言,提供了丰富的加密解密方法和库。
Java中的密码加密解密方法介绍如下。
二、Java加密解密基础在Java中,加密和解密是通过密钥进行的。
加密是将明文(原始数据)转换为密文(难以理解的数据),而解密则是将密文转换回明文。
这两个过程都需要使用到密钥。
Java提供了两种主要的加密技术:对称加密和非对称加密。
对称加密是指加密和解密使用同一个密钥,而非对称加密则是指加密和解密使用不同的密钥。
三、Java对称加密解密方法1. Java内置的加密解密方法:Java提供了一套内置的加密解密方法,主要包括MessageDigest、Cipher等类。
2. Java加密体系:Java加密体系主要包括JCE(Java Cryptography Extension)和JKS(Java KeyStore)。
JCE提供了一系列的加密算法,如AES、DES、RSA等。
JKS 则是用来存储密钥和证书的。
3. 对称加密的示例代码:以下是一个简单的对称加密解密的示例代码。
import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;public class Main {public static void main(String[] args) throws Exception {String key = "1234567890123456"; // 密钥String data = "Hello, World!"; // 要加密的数据// 创建密钥SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");// 创建并初始化Cipher对象Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.ENCRYPT_MODE, secretKey);// 加密数据byte[] encryptedData = cipher.doFinal(data.getBytes());System.out.println("Encrypted data: " + new String(encryptedData));// 创建并初始化Cipher对象cipher.init(Cipher.DECRYPT_MODE, secretKey);// 解密数据byte[] decryptedData = cipher.doFinal(encryptedData);System.out.println("Decrypted data: " + new String(decryptedData));}}四、Java非对称加密解密方法1. Java内置的非对称加密解密方法:Java提供了一套内置的非对称加密解密方法,主要包括KeyPairGenerator、KeyPair、Cipher等类。
给文件夹及word文档加密和解密的方法
给⽂件夹及word⽂档加密和解密的⽅法给⽂件或⽂件夹及WORD⽂档加密和解密的⽅法(编辑整理:頣⼼閣)⼀、⽂件或⽂件夹加密步骤⼀:打开Windows资源管理器。
步骤⼆:右键单击要加密的⽂件或⽂件夹,然后单击“属性”。
步骤三:在“常规”选项卡上,单击“⾼级”。
选中“加密内容以便保护数据”复选框在加密过程中还要注意以下五点:1.要打开“Windows资源管理器”,请单击“开始→程序→附件”,然后单击“Windows资源管理器”。
2.只可以加密NTFS分区卷上的⽂件和⽂件夹,FAT分区卷上的⽂件和⽂件夹⽆效。
3.被压缩的⽂件或⽂件夹也可以加密。
如果要加密⼀个压缩⽂件或⽂件夹,则该⽂件或⽂件夹将会被解压。
4.⽆法加密标记为“系统”属性的⽂件,并且位于systemroot⽬录结构中的⽂件也⽆法加密。
5.在加密⽂件夹时,系统将询问是否要同时加密它的⼦⽂件夹。
如果选择是,那它的⼦⽂件夹也会被加密,以后所有添加进⽂件夹中的⽂件和⼦⽂件夹都将在添加时⾃动加密。
⼆、⽂件或⽂件夹解密步骤⼀:打开Windows资源管理器。
步骤⼆:右键单击加密⽂件或⽂件夹,然后单击“属性”。
步骤三:在“常规”选项卡上,单击“⾼级”。
步骤四:清除“加密内容以便保护数据”复选框。
同样,我们在使⽤解密过程中要注意以下问题:1.要打开“Windows资源管理器”,请单击“开始→程序→附件”,然后单击“Windows资源管理器”。
2.在对⽂件夹解密时,系统将询问是否要同时将⽂件夹内的所有⽂件和⼦⽂件夹解密。
如果选择仅解密⽂件夹,则在要解密⽂件夹中的加密⽂件和⼦⽂件夹仍保持加密。
但是,在已解密⽂件夹内创⽴的新⽂件和⽂件夹将不会被⾃动加密。
以上就是使⽤⽂件加、解密的⽅法!⽽在使⽤过程中我们也许会遇到以下⼀些问题,在此作以下说明:1.⾼级按钮不能⽤原因:加密⽂件系统(EFS)只能处理NTFS⽂件系统卷上的⽂件和⽂件夹。
如果试图加密的⽂件或⽂件夹在FAT或FAT32卷上,则⾼级按钮不会出现在该⽂件或⽂件夹的属性中。
java enc解密方法
java enc解密方法在Java中,可以使用Java内置的加密和解密库来实现加密和解密操作。
以下是一个简单的示例,演示如何使用Java内置的加密和解密库进行加密和解密操作:```javaimport ;import ;import ;import ;public class EncryptionExample {public static void main(String[] args) throws Exception {// 原始字符串String original = "Hello, World!";// 加密密钥String key = "secretkey";// 加密操作Cipher cipher = ("AES/ECB/PKCS5Padding");SecretKeySpec secretKey = new SecretKeySpec((_8), "AES");(_MODE, secretKey);byte[] encrypted = ((_8));String encryptedString = ().encodeToString(encrypted);("加密后的字符串: " + encryptedString);// 解密操作(_MODE, secretKey);byte[] decrypted = (().decode(encryptedString));String decryptedString = new String(decrypted, _8);("解密后的字符串: " + decryptedString);}}```在这个示例中,我们使用AES算法进行加密和解密操作。
我们首先定义了一个原始字符串和加密密钥。
然后,我们使用Cipher类创建一个加密对象,并使用指定的算法和模式进行初始化。
JAVA调用office
最近的一个工作任务中,需要在后台将客户上传的文档(合同文档)进行只读保护(严格意义上的只读保护,既加密锁定,确保不能自行解锁,而不是文件本身只读或者简单锁定),因此想到了调用word宏来操作文档的方式。
经过研究,这种方式是完全可行的,而且已经实现,由于这类资料网络上比较难找,因此特将自己的研究心得总结分享一下。
java需要通过调用com来和office交互,这个可以自己编写jni来实现,不过目前已有三个开源项目支持java对com的调用,它们分别是:com4j、j-Interop和Jacob。
下面先对这三个项目做个简单介绍。
com4j,项目地址是:/projects/com4j/ ,很久没更新了,要使用这个库,需要下载相关的源代码(也可以通过/maven/2/org/jvnet/com4j/ 这个地址去查找相关编译好的包)编译或者通过maven获取maven-com4j-plugin插件,然后运行tlbimp.jar(可以在/maven/2/org/jvnet/com4j/tlbimp/ 里找到)或者maven-com4j-plugin插件去生成相关com组件的模型接口代码(当然前提是要先找到com组件的承载文件所在,这个是有些难度的),然后再使用这些代码去调用相关的com组件,使用起来还是比较麻烦的,而且还存在一些严重的bug。
j-Interop,项目地址是:/ ,一个纯粹的java库,没有使用jni方式去调用com 组件。
但是它的问题是只能调用dcom(分布式com),是通过CIFS协议去调用dcom的,因此要使用它,首先得给机器配置好dcom服务,同时还有一点比较麻烦,就是你要自己去寻找dcom组件的ID(可以通过运行dcomcnfg去查看)。
Jacob,项目地址是:/projects/jacob-project/ ,目前最新的更新是2011年2月份的,本文将着重介绍如何通过这个项目去调用宏。
Java登录密码加密解密代码
return new String(output);
}
}
if(bsh.shared.crypt ==void){
// not yet defined, so create it:
bsh.shared.crypt = new CryptUtil();
}
return hasher.hash().toString();
}
public String sha1(String value) {
Hasher hasher = Hashing.sha1().newHasher();
hasher.putString(value, Charset.forName("UTF-8"));
import mon.hash.Hashing;
public class CryptUtil {
public String md5(String value) {
Hasher hasher = Hashing.md5().newHasher();
hasher.putString(value, Charset.forName("UTF-8"));
cipher.init(Cipher.DECRYPT_MODE, skey);
output = cipher.doFinal(Base64.decodeBase64(input));
} catch (Exception e) {
System.out.println(e.toString());
return hasher.hash().toString();
}
public String base64Encode(String value) {
java接收文件加密解密方法
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进行字符串加密解密算法
// 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍
StringBuffer sb = newStringBuffer(iLen * 2);
for(inti = 0; i < iLen; i++) {
intintTmp = arrB[i];
privatestaticString strDefaultKey = "tourhb";
/** 加密工具 */
privateCipher encryptCipher = null;
/** 解密工具 */
privateCipher decryptCipher = null;
/**
* 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[]
* hexStr2ByteArr(String strIn) 互为可逆的转换过程
*
* @param arrB
* 需要转换的byte数组
* @return 转换后的字符串
* @throws Exception
*
*/
publicstaticString byteArr2HexStr(byte[] arrB) throwsException {
arrB[i] = arrBTmp[i];
}
// 生成密钥
Key key = newjavax.crypto.spec.SecretKeySpec(arrB, "DES");
returnkey;
}
// 把负数转换为正数
while(intTmp < 0) {
java加解密算法--常见加解密算法
java加解密算法--常见加解密算法什么是加密算法?百度百科给出的解释如下:数据加密的基本过程就是对原来为明⽂的⽂件或数据按某种算法进⾏处理,使其成为不可读的⼀段代码,通常称为“密⽂”,使其只能在输⼊相应的密钥之后才能显⽰出本来内容,通过这样的途径来达到保护数据不被⾮法⼈窃取、阅读的⽬的。
该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。
简单来说,就是把某⼀段数据(明⽂),按照“某种规则”转换成另外⼀段不可读的数据(密⽂)。
这⾥选定的“规则”,就是加密算法。
理所当然,当别⼈拿到“密⽂”,解析出“明⽂”的难度取决于加密算法的破解难度。
1. 算法种类单向加密对称加密⾮对称加密1.1 单向加密即加密之后不能解密,⼀般⽤于数据验证1) Base64Base64 编码是从⼆进制到字符的过程,⽤ 64 个字符来表⽰任意的⼆进制数据。
对于开发⼈员来说,拿到密⽂,很容易就能够解析成明⽂。
因此严格来说,Base64不能称之为加密算法,仅仅是⼀种编码⽅式。
它常常⽤于发送Http请求时对URL中参数的编码,保证不是⼀眼就看出来了这些参数的意义,或者图⽚编码传输。
转换⽅法:1 字节(byte) = 8 ⽐特位(bit)Base64 定义了 64 (2^6)个可打印字符表⽰⼆进制的⽅法,也就是说 6 个 bit 的⼆进制数据可以⽤对应的字符代替表⽰对于连续多个⼆进制数据,每 3 个字节⼀组进⾏转换,3个字节 24 bit,然后将其分为 4 部分(3×8 = 4×6),每个部分刚好 6 bit,⾼位补0,将 6 bit ⼆进制转换为 Base64 定义的字符即完成转换若⼆进制数据字节数不是 3 的倍数,Base64 就将剩下的⼆进制数据补 0 ⾄ 3 的倍数,全 0 的⽤字符 “=” 代替⽐如:我要⽤Base64编码⼀个字符串“abc”,实际算法如下:'a','b','c'的ASCII标准编码分别为(⼗进制)97,98,99,因此⽤⼆进制表⽰“abc”字符串就是:01100001,01100010,01100011 ---3组,每组8字节Base64的原理:将这三组8字节,分成4组6字节011000,010110, 001001,100011 ---4组,每组6字节⾼位补000011000,00010110, 00001001,00100011这四个⼆进制数组对应⼗进制的数值分别是:24,22,9,35,RFC2045(Base64解码表)分别为:Y,W,J,j即:"abc"经过Base64编码后,为"YWJj"。
Java读取word文档解决方案
Java读取word文档解决方案嘿,小伙伴,今天咱们就来聊聊如何在Java中读取Word文档,让你的程序也能像人一样“读懂”Word文件。
这可是个常用需求,不管你是做数据分析,还是文档处理,这项技能绝对不能少。
下面,我就用我那十年的方案写作经验,带你一起探索这个话题。
咱们得明确一下,Java读取Word文档主要有两种方式:一种是通过ApachePOI库,另一种是通过JODConverter库。
这两种方法各有千秋,下面我会一一介绍。
一、ApachePOI库ApachePOI,这可是Java读取Word文档的经典之作。
它支持读取和写入Word文档,功能强大,稳定性高。
不过,使用起来可能会有点难度,因为它的API相对复杂。
1.引入依赖你需要在项目的pom.xml文件中引入ApachePOI的依赖:xml<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.1.0</version></dependency>2.读取Word文档就是读取Word文档的核心代码了。
这里我以读取.docx格式的文档为例:javaermodel.XWPFDocument;ermodel.XWPFParagraph;ermodel.XWPFRun;importjava.io.FileInputStream;importjava.io.IOException;importjava.util.List;publicclassWordReader{publicstaticvoidmn(Stringargs){try(FileInputStreamfis=newFileInputStream("path/to/your/ document.docx");XWPFDocumentdoc=newXWPFDocument(fis)){List<XWPFParagraph>paragraphs=doc.getParagraphs();for(XWPFParagraphparagraph:paragraphs){List<XWPFRun>runs=paragraph.getRuns();Stringtext="";for(XWPFRunrun:runs){text+=run.getText(0);}System.out.println(text);}}catch(IOExceptione){e.printStackTrace();}}}这里,我们通过`FileInputStream`读取Word文档,然后创建一个`XWPFDocument`对象来解析文档。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java加密、解密Word文档
对一些重要文档,我们为保证其文档内容不被泄露,常需要对文件进行加密,查看文件时,需要正确输入密码才能打开文件。
下面介绍了一种比较简单的方法给Word文件添加密码保护以及如何给已加密的Word文件取消密码保护。
使用工具:Free Spire.Doc for Java 2.0.0(免费版)
Jar文件导入:
方法1:通过官网下载控件包。
在程序下新建一个directory目录,并命名(本示例中命名为lib);将控件包lib文件夹下的jar(如下图1)复制到程序中新建的目录下。
复制jar文件后,鼠标右键点击jar文件,选择”Add as Library”。
完成导入(如下图2)。
图1:
图2:
方法2:通过maven导入。
参考导入方法。
Java代码示例
【示例1】设置Word密码保护
import com.spire.doc.*;
public class Encrypt {
public static void main(String[] args){
//加载测试文档
String input = "test.docx";
String output= "result.docx";
Document doc = new Document(input);
//调用方法加密文档
doc.encrypt("123");
//保存加密后的文档
doc.saveToFile(output);
}
}
文件加密结果:
【示例2】取消Word密码保护
import com.spire.doc.*;
public class Decrypt {
public static void main(String[] args){
//加载带密码的文件,输入原密码并解除
Document doc = new Document();
doc.loadFromFile("result.docx",FileFormat.Docx_2013,"123");
//将解密后的文档另存
doc.saveToFile("Decrypt.docx",FileFormat.Docx_2013);
}
}
运行程序后,生成的文件将不再有密码保护。
(本文完)。