基于JAVA的文件加密解密

合集下载

数据包加密的若依框架

数据包加密的若依框架

若依框架是一个基于Java语言的数据包加密框架,它提供了一系列加密算法和工具,可以帮助开发者快速实现数据包加密和解密功能。

下面是对若依框架的简要介绍和评价:一、功能特点1. 支持多种加密算法:若依框架提供了多种加密算法,如AES、DES、RSA等,可以根据需求选择合适的算法进行数据加密。

2. 简单易用:若依框架提供了简洁的API,开发者可以轻松实现数据加密和解密功能,无需深入了解加密算法的实现细节。

3. 灵活配置:若依框架支持灵活配置加密参数,如密钥、算法参数等,可以根据实际需求进行配置。

4. 安全可靠:若依框架采用了多种安全措施,如密钥管理、加解密过程的安全控制等,确保数据在传输和存储过程中的安全性。

二、使用场景1. 保护敏感数据:对于需要保护的敏感数据,如用户密码、交易信息等,可以使用若依框架进行加密,确保数据的安全性。

2. 通信加密:在网络安全领域,数据包加密是重要的安全措施之一。

若依框架可以帮助开发者实现网络通信中的数据包加密,提高通信安全性。

3. 数字签名:若依框架还支持数字签名功能,可以对数据进行身份验证和完整性校验,确保数据的安全性和真实性。

三、优点和缺点优点:1. 高效:若依框架采用了高效的加密算法和优化措施,能够快速完成数据包加密和解密操作。

2. 易于集成:若依框架提供了丰富的API和文档,方便开发者将其集成到现有项目中。

3. 安全可靠:若依框架采用了多种安全措施,确保数据在传输和存储过程中的安全性。

缺点:1. 适用范围有限:若依框架主要针对数据包加密需求,对于一些特殊场景(如文件加密、数据库加密等)可能不适用。

2. 性能影响:对于大规模数据的加密和解密操作,若依框架的性能可能受到一定影响。

四、总结若依框架是一个功能强大、易于使用的数据包加密框架,适用于保护敏感数据和实现通信加密等场景。

虽然它可能不适用于所有场景,但其高效、易于集成和安全可靠的特点使其成为许多开发者的首选。

在使用过程中,需要注意适应不同的场景和需求,灵活配置参数和使用合适的算法,以确保数据的安全性和性能。

Java实现MD5加密及解密的代码实例分享

Java实现MD5加密及解密的代码实例分享

Java实现MD5加密及解密的代码实例分享基础:MessageDigest类的使⽤其实要在Java中完成MD5加密,MessageDigest类⼤部分都帮你实现好了,⼏⾏代码⾜矣:/*** 对字符串md5加密** @param str* @return*/import java.security.MessageDigest;public static String getMD5(String str) {try {// ⽣成⼀个MD5加密计算摘要MessageDigest md = MessageDigest.getInstance("MD5");// 计算md5函数md.update(str.getBytes());// digest()最后确定返回md5 hash值,返回值为8为字符串。

因为md5 hash值是16位的hex值,实际上就是8位的字符// BigInteger函数则将8位的字符串转换成16位hex值,⽤字符串来表⽰;得到字符串形式的hash值return new BigInteger(1, md.digest()).toString(16);} catch (Exception e) {throw new SpeedException("MD5加密出现错误");}}进阶:加密及解密类Java实现MD5加密以及解密类,附带测试类,具体见代码。

MD5加密解密类——MyMD5Util,代码如下package com.zyg.security.md5;import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import java.util.Arrays;public class MyMD5Util {private static final String HEX_NUMS_STR="0123456789ABCDEF";private static final Integer SALT_LENGTH = 12;/*** 将16进制字符串转换成字节数组* @param hex* @return*/public static byte[] hexStringToByte(String hex) {int len = (hex.length() / 2);byte[] result = new byte[len];char[] hexChars = hex.toCharArray();for (int i = 0; i < len; i++) {int pos = i * 2;result[i] = (byte) (HEX_NUMS_STR.indexOf(hexChars[pos]) << 4| HEX_NUMS_STR.indexOf(hexChars[pos + 1]));}return result;}/*** 将指定byte数组转换成16进制字符串* @param b* @return*/public static String byteToHexString(byte[] b) {StringBuffer hexString = new StringBuffer();for (int i = 0; i < b.length; i++) {String hex = Integer.toHexString(b[i] & 0xFF);if (hex.length() == 1) {hex = '0' + hex;}hexString.append(hex.toUpperCase());}return hexString.toString();}/*** 验证⼝令是否合法* @param password* @param passwordInDb* @return* @throws NoSuchAlgorithmException* @throws UnsupportedEncodingException*/public static boolean validPassword(String password, String passwordInDb)throws NoSuchAlgorithmException, UnsupportedEncodingException {//将16进制字符串格式⼝令转换成字节数组byte[] pwdInDb = hexStringToByte(passwordInDb);//声明盐变量byte[] salt = new byte[SALT_LENGTH];//将盐从数据库中保存的⼝令字节数组中提取出来System.arraycopy(pwdInDb, 0, salt, 0, SALT_LENGTH);//创建消息摘要对象MessageDigest md = MessageDigest.getInstance("MD5");//将盐数据传⼊消息摘要对象md.update(salt);//将⼝令的数据传给消息摘要对象md.update(password.getBytes("UTF-8"));//⽣成输⼊⼝令的消息摘要byte[] digest = md.digest();//声明⼀个保存数据库中⼝令消息摘要的变量byte[] digestInDb = new byte[pwdInDb.length - SALT_LENGTH];//取得数据库中⼝令的消息摘要System.arraycopy(pwdInDb, SALT_LENGTH, digestInDb, 0, digestInDb.length); //⽐较根据输⼊⼝令⽣成的消息摘要和数据库中消息摘要是否相同if (Arrays.equals(digest, digestInDb)) {//⼝令正确返回⼝令匹配消息return true;} else {//⼝令不正确返回⼝令不匹配消息return false;}}/*** 获得加密后的16进制形式⼝令* @param password* @return* @throws NoSuchAlgorithmException* @throws UnsupportedEncodingException*/public static String getEncryptedPwd(String password)throws NoSuchAlgorithmException, UnsupportedEncodingException {//声明加密后的⼝令数组变量byte[] pwd = null;//随机数⽣成器SecureRandom random = new SecureRandom();//声明盐数组变量byte[] salt = new byte[SALT_LENGTH];//将随机数放⼊盐变量中random.nextBytes(salt);//声明消息摘要对象MessageDigest md = null;//创建消息摘要md = MessageDigest.getInstance("MD5");//将盐数据传⼊消息摘要对象md.update(salt);//将⼝令的数据传给消息摘要对象md.update(password.getBytes("UTF-8"));//获得消息摘要的字节数组byte[] digest = md.digest();//因为要在⼝令的字节数组中存放盐,所以加上盐的字节长度pwd = new byte[digest.length + SALT_LENGTH];//将盐的字节拷贝到⽣成的加密⼝令字节数组的前12个字节,以便在验证⼝令时取出盐 System.arraycopy(salt, 0, pwd, 0, SALT_LENGTH);//将消息摘要拷贝到加密⼝令字节数组从第13个字节开始的字节System.arraycopy(digest, 0, pwd, SALT_LENGTH, digest.length);//将字节数组格式加密后的⼝令转化为16进制字符串格式的⼝令return byteToHexString(pwd);}}测试类——Client,代码如下:package com.zyg.security.md5;import java.io.UnsupportedEncodingException;import java.security.NoSuchAlgorithmException;import java.util.HashMap;import java.util.Map;public class Client {private static Map users = new HashMap();public static void main(String[] args){String userName = "zyg";String password = "123";registerUser(userName,password);userName = "changong";password = "456";registerUser(userName,password);String loginUserId = "zyg";String pwd = "1232";try {if(loginValid(loginUserId,pwd)){System.out.println("欢迎登陆");}else{System.out.println("⼝令错误,请重新输⼊");}} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 注册⽤户** @param userName* @param password*/public static void registerUser(String userName,String password){String encryptedPwd = null;try {encryptedPwd = MyMD5Util.getEncryptedPwd(password);users.put(userName, encryptedPwd);} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 验证登陆** @param userName* @param password* @return* @throws UnsupportedEncodingException* @throws NoSuchAlgorithmException*/public static boolean loginValid(String userName,String password)throws NoSuchAlgorithmException, UnsupportedEncodingException{String pwdInDb = (String)users.get(userName);if(null!=pwdInDb){ // 该⽤户存在return MyMD5Util.validPassword(password, pwdInDb);}else{System.out.println("不存在该⽤户");return false;}}}PS:这⾥再为⼤家提供2款MD5加密⼯具,感兴趣的朋友可以参考⼀下:MD5在线加密⼯具:在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密⼯具:。

java中rsa解密的方法

java中rsa解密的方法

java中rsa解密的方法(实用版3篇)《java中rsa解密的方法》篇1Java 中RSA 解密的方法可以通过以下步骤实现:1. 首先,需要生成RSA 密钥对,包括公钥和私钥。

可以使用Java 提供的KeyGenerator 类来生成密钥对。

2. 使用生成的公钥进行加密,得到加密后的密文。

3. 使用生成的私钥进行解密,得到原始明文。

具体的实现过程可以参考下面的代码片段:```javaimport java.security.KeyGenerator;import java.security.PrivateKey;import java.security.PublicKey;import java.security.RSAPrivateKey;import java.security.RSAPublicKey;import javax.crypto.Cipher;import javax.crypto.spec.EncryptionSpec;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;public class RSA {public static void main(String[] args) {// 生成RSA 密钥对KeyGenerator keyGen = KeyGenerator.getInstance("RSA"); RSAKeyGenerator rsaKeyGen = (RSAKeyGenerator) keyGen; rsaKeyGen.init(2048); // 密钥长度为2048 位PublicKey publicKey = rsaKeyGen.generatePublic();PrivateKey privateKey = rsaKeyGen.generatePrivate();// 使用公钥进行加密byte[] plainText = "Hello, world!".getBytes();byte[] cipherText = encrypt(plainText, publicKey);// 使用私钥进行解密byte[] plainText2 = decrypt(cipherText, privateKey);System.out.println("解密后的明文为:" + new String(plainText2)); }// 加密数据public static byte[] encrypt(byte[] plainText, PublicKey publicKey) { try {Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] cipherText = cipher.doFinal(plainText);return cipherText;} catch (Exception e) {e.printStackTrace();return null;}}// 解密数据public static byte[] decrypt(byte[] cipherText, PrivateKey privateKey) {try {Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] plainText = cipher.doFinal(cipherText);return plainText;} catch (Exception e) {e.printStackTrace();return null;}}}```在以上代码中,首先通过KeyGenerator 类生成RSA 密钥对,然后使用生成的公钥进行加密,得到加密后的密文。

基于Misty1算法的加密软件(JAVA)的实现论文

基于Misty1算法的加密软件(JAVA)的实现论文

基于Misty1算法的加密软件(Java)的实现摘要随着计算机网络及通信技术的飞速发展,信息安全成了信息社会急需解决的最重要的问题之一,密码技术是保证信息安全的核心技术。

本文用JA V A语言开发了一个基于Misty1算法的加密软件,该软件能对文件进行加密和解密。

在具体实现时,首先分析了Misty1算法的基本结构,设计出相应的实施方法,正确实现了该算法,其次,设计了一个图形用户界面,最后对软件进行了测试,验证了实现方法的正确性。

关键词:Misty1;Java;加密;解密The Implementation of Encryption Software (Java) Basedon Misty1 AlgorithmAbstractWith the rapid development of computer networks technology and communication technology, Information security has become one of the most important problems urgent to resolve in information society, Cryptographic technology is the core technology to guarantee information security. In this paper, the software of encryption based on Misty1 algorithm is developed by using JA V A language. It can encrypt and decrypt a file. During the process of implementation, the basic structure of the algorithm is analyzed first and the counterpart method is designed, secondly, a GUI is designed, finally, the software is tested, the result shows that method of implementation is right.Key words:Misty1; Java ; Encryption;Decrypt目录论文总页数:24页1 引言 (1)1.1 课题背景 (1)1.2 国内外研究现状 (1)1.3 本课题研究的意义 (2)1.4 本课题的研究方法 (3)2 MISTY1算法描述 (3)2.1 秘钥产生部分 (3)2.2 数据随机化部分 (4)2.3 函数描述 (4)2.3.1 FI函数 (4)2.3.2 FO函数 (5)2.3.3 FL函数 (7)2.3.4 FL-1函数 (8)3 MISTY1加密软件的设计与实现 (9)3.1 工作环境介绍 (9)3.2 J AVA及程序编辑工具介绍 (9)3.2.1 Java介绍 (9)3.2.2 程序编辑工具介绍 (10)3.3 M ISTY1算法应用于文件加密的分析 (12)3.4 M ISTY1算法的实现 (13)3.4.1 加密 (13)3.4.2 解密 (15)3.5 设计流程图、图形界面及事件处理 (18)3.5.1 加密/解密流程图 (18)3.5.2 图形界面 (18)3.5.3 处理按钮事件 (20)4 程序演示 (21)4.1 程序演示 (21)4.2 结果及存在的问题 (21)结论 (22)参考文献 (22)致谢 (23)声明 (24)1引言1.1课题背景现代密码学是一门迅速发展的应用科学。

Java使用数字证书加密文件(含代码)

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中sha256加解密方法

java中sha256加解密方法

java中sha256加解密方法SHA256是一种常用的加密算法,它可以对数据进行加密和解密操作。

在Java中,我们可以使用Java的安全库提供的功能来实现SHA256的加解密。

我们需要导入Java的安全库,这可以通过在代码中添加以下语句来实现:```import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;```接下来,我们需要定义一个方法来实现SHA256的加密功能,可以命名为sha256Encrypt。

该方法接受一个字符串作为参数,并返回一个加密后的字符串。

具体代码如下:```public static String sha256Encrypt(String input) {try {MessageDigest digest = MessageDigest.getInstance("SHA-256");byte[] hash = digest.digest(input.getBytes("UTF-8"));StringBuilder hexString = new StringBuilder();for (byte b : hash) {String hex = Integer.toHexString(0xff & b);if (hex.length() == 1) hexString.append('0');hexString.append(hex);}return hexString.toString();} catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {e.printStackTrace();}return null;}```在这个方法中,我们首先通过调用MessageDigest.getInstance("SHA-256")来获取SHA-256算法的实例。

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 }。

vuejava使用AES前后端加密解密

vuejava使⽤AES前后端加密解密最近在项⽬中需要针对重要数据进⾏加密传输在⽹上找了⼀⼤推加密⽅式最终采⽤AES 加密1、java端package com.zk.web.util;/*** AES 128bit 加密解密⼯具类* @author dufy*/import mons.codec.binary.Base64;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;public class AesEncryptUtil {//使⽤AES-128-CBC加密模式,key需要为16位,key和iv可以相同!private static String KEY = "1234567890123456";private static String IV = "1234567890123456";/*** 加密⽅法* @param data 要加密的数据* @param key 加密key* @param iv 加密iv* @return 加密的结果* @throws Exception*/public static String encrypt(String data, String key, String iv) throws Exception {try {Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");//"算法/模式/补码⽅式"NoPadding PkcsPaddingint blockSize = cipher.getBlockSize();byte[] dataBytes = data.getBytes();int plaintextLength = dataBytes.length;if (plaintextLength % blockSize != 0) {plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));}byte[] plaintext = new byte[plaintextLength];System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);byte[] encrypted = cipher.doFinal(plaintext);return new Base64().encodeToString(encrypted);} catch (Exception e) {e.printStackTrace();return null;}}/*** 解密⽅法* @param data 要解密的数据* @param key 解密key* @param iv 解密iv* @return 解密的结果* @throws Exception*/public static String desEncrypt(String data, String key, String iv) throws Exception {try {byte[] encrypted1 = new Base64().decode(data);Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);byte[] original = cipher.doFinal(encrypted1);String originalString = new String(original);return originalString;} catch (Exception e) {e.printStackTrace();return null;}}/*** 使⽤默认的key和iv加密* @param data* @return* @throws Exception*/public static String encrypt(String data) throws Exception {return encrypt(data, KEY, IV);}/*** 使⽤默认的key和iv解密* @param data* @return* @throws Exception*/public static String desEncrypt(String data) throws Exception {return desEncrypt(data, KEY, IV);}/*** 测试*/public static void main(String args[]) throws Exception {String test1 = "sa";String test =new String(test1.getBytes(),"UTF-8");String data = null;String key = KEY;String iv = IV;// /g2wzfqvMOeazgtsUVbq1kmJawROa6mcRAzwG1/GeJ4=data = encrypt(test, key, iv);System.out.println("数据:"+test);System.out.println("加密:"+data);String jiemi =desEncrypt(data, key, iv).trim();System.out.println("解密:"+jiemi);}}可以看到 sa 经过加密 COgQPJgLX+gLJGXkKGznJQ==2、前端vue 引⼊npm install crypto-js写相关js 函数import CryptoJS from 'crypto-js/crypto-js'// 默认的 KEY 与 iv 如果没有给const KEY = CryptoJS.enc.Utf8.parse("1234567890123456");const IV = CryptoJS.enc.Utf8.parse('1234567890123456');/*** AES加密:字符串 key iv 返回base64*/export function Encrypt(word, keyStr, ivStr) {let key = KEYlet iv = IVif (keyStr) {key = CryptoJS.enc.Utf8.parse(keyStr);iv = CryptoJS.enc.Utf8.parse(ivStr);}let srcs = CryptoJS.enc.Utf8.parse(word);var encrypted = CryptoJS.AES.encrypt(srcs, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.ZeroPadding});// console.log("-=-=-=-", encrypted.ciphertext)return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);}/*** AES 解密:字符串 key iv 返回base64**/export function Decrypt(word, keyStr, ivStr) {let key = KEYlet iv = IVif (keyStr) {key = CryptoJS.enc.Utf8.parse(keyStr);iv = CryptoJS.enc.Utf8.parse(ivStr);}let base64 = CryptoJS.enc.Base64.parse(word);let src = CryptoJS.enc.Base64.stringify(base64);var decrypt = CryptoJS.AES.decrypt(src, key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.ZeroPadding});var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);return decryptedStr.toString();}---在相关模块中引⼊import {Decrypt,Encrypt} from '@/plugins/cryptojs'在vue data()中定义 2个测试变量 d1,d2在 template插⼊<div>原数据: <el-input v-model="d1" placeholder="请输⼊内容"></el-input> <el-button type="primary" @click="jiami" plain>加密</el-button><el-button type="primary" @click="jiemi" plain>解密</el-button>加密数据: <el-input v-model="d2" placeholder="请输⼊内容"></el-input> </div>在methods 插⼊函数jiami(){console.log("加密-----",this.d1); let dd = Encrypt(this.d1)console.log(dd)this.d2= dd},jiemi(){console.log("解密-----",this.d2);this.d1= Decrypt(this.d2)},效果最终完成想要的功能.。

javasm4国密算法加密、解密

javasm4国密算法加密、解密1.准备⼯作 所需jar包: bcprov-jdk15on-1.59.jar commons-lang3-3.1.jar 20200901 对应的maven依赖<!--sm3,sm4加密算法--><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.66</version></dependency> import java.security.Key;import java.security.NoSuchAlgorithmException;import java.security.NoSuchProviderException;import java.security.SecureRandom;import java.security.Security;import java.util.Arrays;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.spec.SecretKeySpec;import org.bouncycastle.jce.provider.BouncyCastleProvider;import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;/*** sm4加密算法⼯具类* @explain sm4加密、解密与加密结果验证* 可逆算法* @author Marydon* @creationTime 2018年7⽉6⽇上午11:46:59* @version 1.0* @since*@*****************************/public class Sm4Util {static {Security.addProvider(new BouncyCastleProvider());}private static final String ENCODING = "UTF-8";public static final String ALGORITHM_NAME = "SM4";// 加密算法/分组加密模式/分组填充⽅式// PKCS5Padding-以8个字节为⼀组进⾏分组加密// 定义分组加密模式使⽤:PKCS5Paddingpublic static final String ALGORITHM_NAME_ECB_PADDING = "SM4/ECB/PKCS5Padding";// 128-32位16进制;256-64位16进制public static final int DEFAULT_KEY_SIZE = 128;/*** ⽣成ECB暗号* @explain ECB模式(电⼦密码本模式:Electronic codebook)* @param algorithmName* 算法名称* @param mode* 模式* @param key* @return* @throws Exception*/private static Cipher generateEcbCipher(String algorithmName, int mode, byte[] key) throws Exception {Cipher cipher = Cipher.getInstance(algorithmName, BouncyCastleProvider.PROVIDER_NAME);Key sm4Key = new SecretKeySpec(key, ALGORITHM_NAME);cipher.init(mode, sm4Key);return cipher;}}2.SM4加密 第⼀步:产⽣密钥 ⽅式⼀:系统⽣成密钥/*** ⾃动⽣成密钥* @explain* @return* @throws NoSuchAlgorithmException* @throws NoSuchProviderException*/public static byte[] generateKey() throws Exception {return generateKey(DEFAULT_KEY_SIZE);}/*** @explain* @param keySize* @returnpublic static byte[] generateKey(int keySize) throws Exception {KeyGenerator kg = KeyGenerator.getInstance(ALGORITHM_NAME, BouncyCastleProvider.PROVIDER_NAME); kg.init(keySize, new SecureRandom());return kg.generateKey().getEncoded();} ⽅法⼆:⾃⼰提供16进制的密钥 第⼆步:加密/*** sm4加密* @explain 加密模式:ECB* 密⽂长度不固定,会随着被加密字符串长度的变化⽽变化* @param hexKey* 16进制密钥(忽略⼤⼩写)* @param paramStr* 待加密字符串* @return 返回16进制的加密字符串* @throws Exception*/public static String encryptEcb(String hexKey, String paramStr) throws Exception {String cipherText = "";// 16进制字符串-->byte[]byte[] keyData = ByteUtils.fromHexString(hexKey);// String-->byte[]byte[] srcData = paramStr.getBytes(ENCODING);// 加密后的数组byte[] cipherArray = encrypt_Ecb_Padding(keyData, srcData);// byte[]-->hexStringcipherText = ByteUtils.toHexString(cipherArray);return cipherText;}/*** 加密模式之Ecb* @explain* @param key* @param data* @return* @throws Exception*/public static byte[] encrypt_Ecb_Padding(byte[] key, byte[] data) throws Exception {Cipher cipher = generateEcbCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.ENCRYPT_MODE, key);return cipher.doFinal(data);}3.SM4解密/*** sm4解密* @explain 解密模式:采⽤ECB* @param hexKey* 16进制密钥* @param cipherText* 16进制的加密字符串(忽略⼤⼩写)* @return 解密后的字符串* @throws Exception*/public static String decryptEcb(String hexKey, String cipherText) throws Exception {// ⽤于接收解密后的字符串String decryptStr = "";// hexString-->byte[]byte[] keyData = ByteUtils.fromHexString(hexKey);// hexString-->byte[]byte[] cipherData = ByteUtils.fromHexString(cipherText);// 解密byte[] srcData = decrypt_Ecb_Padding(keyData, cipherData);// byte[]-->StringdecryptStr = new String(srcData, ENCODING);return decryptStr;}/*** 解密* @explain* @param key* @param cipherText* @return* @throws Exception*/public static byte[] decrypt_Ecb_Padding(byte[] key, byte[] cipherText) throws Exception {Cipher cipher = generateEcbCipher(ALGORITHM_NAME_ECB_PADDING, Cipher.DECRYPT_MODE, key);return cipher.doFinal(cipherText);} 4.加密数据校验/*** 校验加密前后的字符串是否为同⼀数据* @explain* @param hexKey* 16进制密钥(忽略⼤⼩写)* @param cipherText* 16进制加密后的字符串* @param paramStr* 加密前的字符串* @return 是否为同⼀数据。

java实现Base64加密解密算法

java实现Base64加密解密算法Base64是⽹络上最常见的⽤于传输8Bit字节代码的编码⽅式之⼀,⼤家可以查看RFC2045~RFC2049,上⾯有MIME的详细规范。

Base64编码可⽤于在HTTP环境下传递较长的标识信息。

例如,在Java Persistence系统Hibernate中,就采⽤了Base64来将⼀个较长的唯⼀标识符(⼀般为128-bit的UUID)编码为⼀个字符串,⽤作HTTP表单和HTTP GET URL中的参数。

在其他应⽤程序中,也常常需要把⼆进制数据编码为适合放在URL(包括隐藏表单域)中的形式。

此时,采⽤Base64编码不仅⽐较简短,同时也具有不可读性,即所编码的数据不会被⼈⽤⾁眼所直接看到。

java的加密⽅式有很多中,现在给⼤家分享⼀个Base64加密的⽅式package com.crypt;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;/*** BASE64加密解密* @author YUANWEi*/public class BASE64 {/*** BASE64解密** @param key* @return* @throws Exception*/public static byte[] decryptBASE64(String key) throws Exception {return (new BASE64Decoder()).decodeBuffer(key);}/*** BASE64加密** @param key* @return* @throws Exception*/public static String encryptBASE64(byte[] key) throws Exception {return (new BASE64Encoder()).encodeBuffer(key);}}为什么要使⽤Base64加密呢?Base64编码的作⽤:由于某些系统中只能使⽤ASCII字符。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

综合实践课程设计 题 目 基于java的文件加密解密设计 学 院 通信与电子工程学院 专业班级 通信工程112班 学生姓名 张 指导教师

2014年 12 月 31 通信112班, 基于java的文件加密解密设计

I 摘 要

自从Java技术出现以业,有关Java平台的安全性用由Java技术发展所引发的安全性问题,引起了越来越多的关注。目前,Java已经大量应用于各个领域,研究Java的安全性对于更好地利用Java具有深远的意义。 使用Java的安全机制设计和实现安全系统更具有重要的应用价值。本课程设计,一共有四个模块分别为窗口模块、登录模块、加密模块、解密模块,其中加密、解密模块是两个核心模块。实现了带指定用户登录窗口并且登录后登录窗口自动关闭,运用“ab互换”的简单算法实现对文件加密解密,对文件加密后原文件自动删除,对文件解密后加密后的文件自动删除的完整的文件加密解密设计。目前,用于文件加密解密的方法有很多,但大多数比较复杂,不太适合于对容量较大的文件进行加密,本次用Java设计的文件加密解密方法简单,运行时间短,适合对大容量的文件进行加密,有很高的利用价值。

关键词:窗口模块;登录模块;加密模块;解密模块;算法 通信112班, 基于java的文件加密解密设计

II Abstract Since the advent of Java technology in industry, about the safety of the Java platform used by Java technology development caused by security issues, has attracted more and more attention. At present, the Java has a lot of applications in various fields, research the Java security for better use of Java has far-reaching significance. Security mechanism design and implementation using Java security system has important application value This course design, a total of four modules respectively window module, login module, encryption, decryption module, the module, the encryption and decryption module is two core modules Implements the specified user login window and login window automatically shut down after the login, using the "ab swap" simple algorithm to decrypt the file encryption, the original file automatically deleted after the file encryption, to decrypt the files encrypted files automatically deleted after complete file encryption to decrypt design. At present, used in file encryption to decrypt method are many, but most of the complex, is not suitable for the large capacity of file is encrypted, this design in the Java file encryption to decrypt method is simple, short operation time, suitable for large capacity file is encrypted, has very high use value.

Keywords: window module; The login module; Encryption module; Decryption module; algorithm 通信112班, 基于java的文件加密解密设计

III 目 录

摘 要 ............................................................................................................................................... I Abstract ............................................................................................................................................ II 第1章 绪论 ................................................................................................................................... 1 1.1 概述 .................................................................................................................................. 1 1.2 研究现状 .......................................................................................................................... 1 1.3 应用现状 .......................................................................................................................... 2 第2章 系统整体设计思路 ............................................................................................................. 3 2.1 程序操作流程图 .............................................................................................................. 3 2.2 实现整体功能简介 .......................................................................................................... 4 第3章 系统各模块的简介 ........................................................................................................... 5 3.1 窗口操作模块 .................................................................................................................. 5 3.1.1 窗口设计过程 ....................................................................................................... 5 3.1.2 实现所用关键代码简述 ....................................................................................... 6 3.2 登录操作模块 .................................................................................................................. 7 3.2.1 登录设计过程 ....................................................................................................... 7 3.2.2 实现所用关键代码简述 ....................................................................................... 7 3.3 加密操作模块 .................................................................................................................. 9 3.3.1 加密设计过程 ....................................................................................................... 9 3.3.2 实现所用关键代码简述 ..................................................................................... 10 3.4 解密操作模块 ................................................................................................................ 11 3.4.1 解密设计过程 ..................................................................................................... 12 3.4.2 实现所用关键代码简述 ..................................................................................... 12 第4章 运行调试 ......................................................................................................................... 14 4.1 加密模块 ........................................................................................................................ 14 4.2 解密模块 ........................................................................................................................ 15 参考文献......................................................................................................................................... 17 附录 ................................................................................................................................................ 18 致谢 ................................................................................................................................................ 24

相关文档
最新文档