JavaIO流加解密,AES对字符串加解密

加解密文件?
哈哈哈哈,当然是为了安全,自己的东西不像让别人看见。

1,学了JavaIO流的字节流的读取写入,便可实现。
加密原理: 把文件读取,然后,按某个特定的规则改变其字节写入一个新文件。

解密原理:读取新文件,把文件按照写入的格式还原。

这样是说不清的,上代码。
以加解密图片为例子。

package funJoy;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class AddPwd {public static void main(String[] args) {String path = "E:\\s2\\myEclipseWork\\CopyImage\\";// 加密//addPwd(path + "1.jpg", path + "2.jpg");// 解密solutionPwd(path + "2.jpg", path + "deCode.jpg");}public static void addPwd(String read, String write) {// 加解密操作 改变文件字节码组成FileInputStream fis = null;FileOutputStream fos = null;try {fis = new FileInputStream(read);fos = new FileOutputStream(write);int len;while ((len = fis.read()) != -1) {// 这里可以对len做出改变 +-*/都行,这里+,后面减fos.write(len + 9);}} catch (FileNotFoundException e) {System.out.println(e);} catch (IOException e) {System.out.println(e);} finally {try {fos.close();fis.close();} catch (IOException e) {System.out.println(e);}}}public static void solutionPwd (String read, String write) {// 解密操作 还原到原来的字节码FileInputStream fis = null;FileOutputStream fos = null;try {fis = new FileInputStream(read);fos = new FileOutputStream(write);int len;while ((len = fis.read()) != -1) {fos.write(len - 9);}} catch (FileNotFoundException e) {System.out.println(e);} catch (IOException e) {System.out.println(e);} finally {try {fos.close();fis.close();} catch(IOException e) {System.out.println(e);}}}}

2,Cipher类 和 base64encode对字符串加密

package pwd.joy;//import java.io.*;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;import Decoder.BASE64Decoder;
import Decoder.BASE64Encoder;/***  @author echo lovely*  @createDay 2020/1/1* * */public class TestCipher {public static void main(String[] args) {String pwd = setCipher("HELLO WORLD, 2020, EVERYTHING IS WELL!");System.out.println(pwd);String str =  decrypt(pwd);System.out.println(str);				}/*** 返回一个密文。* */public static String setCipher(String content) {String encoded = "";try {// 密钥Key secretKey = getKey("abc");// AES 高级加密标准 ADVANCED ENCRYPTION STANDARDCipher ch = Cipher.getInstance("AES");ch.init(Cipher.ENCRYPT_MODE, secretKey);BASE64Encoder encoder = new BASE64Encoder();byte[] b = ch.doFinal(content.getBytes("UTF-8"));encoded = encoder.encode(b);		} catch (IllegalBlockSizeException | BadPaddingException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();}return encoded;}public static Key getKey(String keySeed) {  if (keySeed == null) { // 获取指定的环境变量值。keySeed = System.getenv("AES_SYS_KEY");  }  if (keySeed == null) {  // 获取指定键指示的系统属性。keySeed = System.getProperty("AES_SYS_KEY");  }  if (keySeed == null || keySeed.trim().length() == 0) {  keySeed = "echoLovely!@#$";// 默认种子  }  try {  // 这是个强加密随机器  返回实现指定随机数生成器 (RNG) 算法的 SecureRandom 对象。SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");  // 重新设置此随机对象的种子。secureRandom.setSeed(keySeed.getBytes());  // 返回AES对称密钥生成器 KeyGenerator generator = KeyGenerator.getInstance("AES"); // 初始化密钥生成器generator.init(secureRandom);  // 返回密钥return generator.generateKey(); } catch (Exception e) {  throw new RuntimeException(e);  }  }/*** 根据密钥对指定的密文cipherText进行解密.** @param pwd 密文* @return 解密后的字符串.*/public static String decrypt(String pwd) {Key secretKey = getKey("abc");byte[] result = null;try {// 密钥AES算法Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.DECRYPT_MODE, secretKey);BASE64Decoder decoder = new BASE64Decoder();byte[] c = decoder.decodeBuffer(pwd);result = cipher.doFinal(c);	String re = new String (result, "UTF-8");return re;} catch (Exception e) {throw new RuntimeException(e);} }}

密钥是 abc,可控的。

Zo+zIB3CEIFwshPItHKL7sKqjhub9hEZO+pyy3alhUnw2O8Z8mY/lBxY1rL5oar5
HELLO WORLD, 2020, EVERYTHING IS WELL!

emmm,其实我想对视频加密的如果用第一种方法,太太慢了,也是不可行的。
第二种aes算法,我我从昨天晚上搞到今天下午都只报 字节要是16的倍数。我怀疑这个不能对视频加密。字符串,字节数组相互转换,都可能错了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android--通知之Notification

前言 之前一篇博客讲了Android下使用Toast的方式提示消息。这篇博客讲解一下在Android中使用Notification提示消息给用户,Notification是一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notification。在本篇博客中,将介绍…

1049. 数列的片段和(20)

1049. 数列的片段和(20) 时间限制200 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CAO, Peng给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列{0.1, 0.2, 0.3, 0.4},我们有(0.1) (0.1…

UDP协议下的DatagramSocket和DatagramPacket

1,UDP协议? 面向无连接,数据不安全,但速度快。不区分客户端与服务端。 2,实现通信? (三个达到) IP 简单说就是你电脑地址。端口 你电脑里面软件的地址。协议 如何进行通讯。 DatagramSocket 用来发送和接收数据报包的…

使用Log4J监控系统日志邮件警报

使用Log4J监控系统日志邮件警报 前言 在系统上线后,有时候遇到系统故障,这时候就可以登录服务器查看系统日志来排查问题。但是需要登录服务器,下载查找相关异常日志比较麻烦。而且没有监控的话,也无法实时了解到系统是否正常运行。…

1044. 火星数字(20)

1044. 火星数字(20) 时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue火星人是以13进制计数的: 地球人的0被火星人称为tret。 地球人数字1到12的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, d…

TCP协议下 Socket 与 ServerSocket

不多bb. package c_20_1_5;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socke…

Autodesk的照片建模云服务—Autodesk ReCap 360 photo

现实捕捉技术方兴未艾,简单的讲现实捕捉技术就是把现实中的现状信息数字化到计算机中以便做进一步的处理。对于不同的应用目的会有不同的捕捉设备,工程或传媒娱乐行业中经常用到的肯定就是三维模型了。那如何得到三维模型呢?我们有多种途径和…

1055. 集体照 (25)

1055. 集体照 (25) 时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue拍集体照时队形很重要,这里对给定的N个人K排的队形设计排队规则如下: 每排人数为N/K(向下取整),多出来的人全部站在…

线程下的udp和tcp局域网聊天

多线程,继承Thread类,重写run方法。 udp下的聊天。 两方,每一方都可发,可收。 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.…

委托事件实现更新窗体

委托 和 事件在 .Net Framework中的应用非常广泛。 委托( Delegate ):是一种定义方法签名(只有方法的名字,没有方法体),可以与具有兼容的签名的任何方法关联。所谓兼容的方法,是指 这个方法和委托的方法签名具有相同的返回类型和参…

1050. 螺旋矩阵(25)

1050. 螺旋矩阵(25) 时间限制150 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充。要求…

Java多线程,锁(synchronize),饿汉式单例线程,等待处理机制

一,礼让和守护线程 package com.much.hard;public class TestYieldProtect {public static void main(String[] args) {Yield1 y1 new Yield1();y1.setName("A");Yield2 y2 new Yield2();y2.setName("B");//y1.start();//y2.start();Daemon1…

升级ADT22.6后,Android模拟器无法创建

这 两天,在社区里看到有小伙伴们反应,自己在Eclipse下无法创建Android模拟器的问题。起初,自己也没太在意,我一直使用的是 Genymotion模拟器。然后,问题不解决,总有那么一天会让自己碰到的。这不&#xff0…

1052. 卖个萌 (20)

1052. 卖个萌 (20) 时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue萌萌哒表情符号通常由“手”、“眼”、“口”三个主要部分组成。简单起见,我们假设一个表情符号是按下列格式输出的: [左手]([左眼][口][右眼])[右手]…

原来js的parseInt函数还可以这样用

QQpc端登录账号还可以这样玩!!! 图片上来。 wow,我惊呆了。 居然可以登录进出?! 都知道,登录会验证账号是整数,文本框输入的是字符串,会把字符串转成整数, 而…

一步步学习SPD2010--词汇表

association关联:两个ECTs外部内容类型间的关系。 BCS业务连接服务:见Business Connectivity Service(BCS) BDC业务数据连接:见Business Data Connectivity(BDC) breadcrumb面包屑导航: 一系列链接&#xf…

1035. 插入与归并(25)

1035. 插入与归并(25) 时间限制200 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, Yue根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元…

自定义泛型集合,接口

自定义泛型集合 package C12_21;public class abstractList {public static void main(String[] args) {stu<String> stus new stu<String>();stus.setS("hello");System.out.println(stus.getS());// 灵活, 可以传入任意数据类型。 将运行错误转变为编…

安装json扩展

json_encode无法使用&#xff0c;要求扩展php>5.2,json>2.1.0 http://syue.com/Software/Web/php/17843.html 改php.ini加extensionjson.so转载于:https://www.cnblogs.com/mucaiweiblog/p/3618599.html