在运营某些项目时,我们可能需要使用到第三方的服务器来存储数据和文件,对于文本的加密,我们可以用很多简单的对称算法,比如DES,加密后再在网络中传输,接收方再通过秘钥解密即可。但是对于文件的加密,却相对复杂一点。在实际业务中,我遇到了一个问题,不能让图片被第三方使用,存储到云服务器的图片也不能被相应的服务商查看。(国内的像阿里云,又拍云,七牛对是不会允许一些敏感文件存储的)。那怎么实现这些敏感文件的存储呢。以下是我提出的解决方案,以安卓为例。
文件头是位于文件开头的一段承担一定任务的数据,一般都在开头的部分,解决方案就是修改文件头的内容。关于文件头的内容可以自行百度。
1.文件实现加密后上传
- private static void encrypt(File file) throws IOException {
- int key=123456;
- RandomAccessFile raf = null;
- try {
- raf = new RandomAccessFile(file, "rw");
- raf.seek(0);
- byte[] b = new byte[8];
- raf.read(b,0,b.length);
- byte[] newbyte=new byte[8];
- for(int i=0;i<b.length;i++){
- newbyte[i]=(byte)(b[i]^key);
- }
- raf.seek(0);
- raf.write(newbyte,0,newbyte.length);
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (raf != null) {
- try {
- raf.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
获取文件的前8个字节内容,通过与秘钥key进行与运算得到新值,然后再写入头部。这样子文件的信息就被打乱了,使用一般的软件是不能正确读取文件的。
2.显示解密。因为文件在从网络上获取的时候是以流的形式传输的,边传输边解密就不会影响程序性能。
在android应用程序中,我使用的 Universal Image Loader,这个插件支持用户扩展图片下载器(imageDownloader)和图片解析器(imageDecoder)。
- public class MyImageDownloader extends BaseImageDownloader {
- public MyImageDownloader (Context context) {
- super(context);
- }
- public MyImageDownloader (Context context, int connectTimeout, int readTimeout) {
- super(context, connectTimeout, readTimeout);
- }
- @Override
- protected InputStream getStreamFromNetwork(String imageUri, Object extra) throws IOException {
- return new MyInputSream(super.getStreamFromNetwork(imageUri, extra));
- }
- private class MyInputSream extends InputStream {
- private final InputStream inputStream;
- private int i=0;
- private int key=123456;
- private MyInputSream(InputStream inputStream) {
- this.inputStream = inputStream;
- }
- @Override
- public int read() throws IOException {
- int buffer = inputStream.read();
- i++;
- if(i<=8){
- buffer= buffer ^ key;
- }
- return buffer;
- }
- }
- }
解密只需要创建一个继承InputStream的类,重写 read方法,对前8个字节的内容再进行与操作,就得到了加密前的内容。
相关推荐
学习RSA算法,读取数字证书中的私钥对文件进行加密,使用数字证书的公钥解密,这种方式就是RSA算法.
Java加密库:使用Java提供的加密库实现Misty1算法,包括密钥生成、加密和解密等操作。 GUI框架:选择合适的GUI框架,如Swing或JavaFX,实现用户界面设计和交互功能。 文件IO操作:使用Java的文件IO流实现文件读写...
WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB...
WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB...
WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道...
WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道...
WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道...
WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB...
图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...
Java加密解密工具集 JCT v1.0源码包.rar Java半透明图片实现的步骤及源代码.rar Java右键弹出菜单源码 Java吃豆子游戏源代码.rar Java图片加水印,支持旋转和透明度设置 Java圆形按钮实例代码,含注释 Java圆形电子...
图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...