`
雨打蕉叶
  • 浏览: 236962 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Java实现文件加密传输和快速解密读取

阅读更多

在运营某些项目时,我们可能需要使用到第三方的服务器来存储数据和文件,对于文本的加密,我们可以用很多简单的对称算法,比如DES,加密后再在网络中传输,接收方再通过秘钥解密即可。但是对于文件的加密,却相对复杂一点。在实际业务中,我遇到了一个问题,不能让图片被第三方使用,存储到云服务器的图片也不能被相应的服务商查看。(国内的像阿里云,又拍云,七牛对是不会允许一些敏感文件存储的)。那怎么实现这些敏感文件的存储呢。以下是我提出的解决方案,以安卓为例。

文件头是位于文件开头的一段承担一定任务的数据,一般都在开头的部分,解决方案就是修改文件头的内容。关于文件头的内容可以自行百度。

1.文件实现加密后上传

 

Java代码 
  1. private static void encrypt(File file) throws IOException {  
  2.   
  3.                 int key=123456;  
  4.         RandomAccessFile raf = null;  
  5.         try {  
  6.             raf = new RandomAccessFile(file, "rw");  
  7.   
  8.             raf.seek(0);  
  9.             byte[] b = new byte[8];  
  10.             raf.read(b,0,b.length);  
  11.             byte[] newbyte=new byte[8];  
  12.             for(int i=0;i<b.length;i++){  
  13.                 newbyte[i]=(byte)(b[i]^key);  
  14.             }  
  15.             raf.seek(0);  
  16.             raf.write(newbyte,0,newbyte.length);  
  17.   
  18.         } catch (IOException e) {  
  19.             e.printStackTrace();  
  20.         } finally {  
  21.             if (raf != null) {  
  22.                 try {  
  23.                     raf.close();  
  24.                 } catch (IOException e) {  
  25.                     e.printStackTrace();  
  26.                 }  
  27.             }  
  28.         }  
  29.     }  

 获取文件的前8个字节内容,通过与秘钥key进行与运算得到新值,然后再写入头部。这样子文件的信息就被打乱了,使用一般的软件是不能正确读取文件的。

 

2.显示解密。因为文件在从网络上获取的时候是以流的形式传输的,边传输边解密就不会影响程序性能。

在android应用程序中,我使用的 Universal Image Loader,这个插件支持用户扩展图片下载器(imageDownloader)和图片解析器(imageDecoder)。

 

Java代码 
  1. public class MyImageDownloader extends BaseImageDownloader {  
  2.   
  3.     public MyImageDownloader (Context context) {  
  4.         super(context);  
  5.     }  
  6.     public MyImageDownloader (Context context, int connectTimeout, int readTimeout) {  
  7.         super(context, connectTimeout, readTimeout);  
  8.     }  
  9.   
  10.     @Override  
  11.     protected InputStream getStreamFromNetwork(String imageUri, Object extra) throws IOException {  
  12.   
  13.         return new MyInputSream(super.getStreamFromNetwork(imageUri, extra));  
  14.     }  
  15.   
  16.     private class MyInputSream extends InputStream {  
  17.   
  18.   
  19.         private final InputStream inputStream;  
  20.         private int i=0;  
  21.         private int key=123456;  
  22.   
  23.         private MyInputSream(InputStream inputStream) {  
  24.             this.inputStream = inputStream;  
  25.         }  
  26.         @Override  
  27.         public int read() throws IOException {  
  28.             int buffer = inputStream.read();  
  29.             i++;  
  30.                 if(i<=8){  
  31.                     buffer= buffer ^ key;  
  32.                 }  
  33.             return buffer;  
  34.         }  
  35.     }  
  36. }  

解密只需要创建一个继承InputStream的类,重写 read方法,对前8个字节的内容再进行与操作,就得到了加密前的内容。

 

0
0
分享到:
评论

相关推荐

    java实现文件加密解密

    Java 实现文件的加密与解密是指利用 Java 语言将资源文件(包括图片、动画等类型)进行简单的加密和解密。这种策略的原因和好处是将准备好的资源存储在云上,使用时通过网络进行读取即可,减少了应用程序本身的大小...

    加密和解密文件

    在IT领域,文件的安全性是至关重要的,尤其是在网络传输、存储和共享时。"加密和解密文件"的主题涉及到信息安全的核心技术,它确保了数据在未经授权的情况下无法被访问或理解。这里的描述提到这是一个带有图形用户...

    java 基于AES实现对文件的加密 解密

    本文将深入探讨如何使用AES实现文件的加密和解密过程。 首先,理解AES的基本原理至关重要。AES是一种块密码,它将数据分块进行处理,标准块大小为128位。加密和解密过程都基于一系列复杂的数学运算,包括字节替换、...

    RAS前端加密,JAVA后端解密。实现加密传送(补充了一个JS)

    文档"登录前端加密后端解密.docx"可能包含了详细的步骤、代码示例和解释,以指导开发者如何实施这个流程。例如,它可能涵盖了如何配置jsencrypt.js,如何在JAVA后端导入和使用RSA密钥,以及如何正确地进行MD5散列等...

    JAVA 使用数字证书加密解密文件

    本文将深入探讨如何使用Java语言结合RSA算法,通过数字证书实现文件的加密和解密操作。RSA是一种非对称加密算法,它的核心在于一对密钥:公钥和私钥。公钥可以公开给任何人,用于加密数据;而私钥必须保密,用于解密...

    java对文件进行加密和解密操作

    本文将深入探讨Java中实现文件加密和解密的基本原理和技术。 1. **基本概念** - **加密**:是指将可读的数据(明文)转换为不可读的形式(密文),以防止未经授权的访问。 - **解密**:是加密的逆过程,将密文...

    基于Java的文件加密与解密

    本程序利用Java的IO流操作,实现了用户自定义密码对文件进行加密和解密的功能,确保了数据的隐私性和完整性。 首先,我们需要了解Java中的IO流。IO流是Java提供的处理输入输出操作的一系列类,分为字节流(处理原始...

    C#实现RSA加密,JAVA实现解密,交互通信

    RSA是一种非对称加密算法,它的核心在于一对公钥和私钥,用于加密和解密数据,确保即使数据在网络中传输,也能防止被未经授权的第三方读取。 标题中的"C#实现RSA加密,JAVA实现解密",意味着我们将使用C#来生成RSA...

    java模仿QQ通信实现RSA加密解密

    在本文中,我们将深入探讨如何使用Java来模仿QQ通信,并实现RSA加密解密技术,同时涉及多客户端连接和消息安全性的关键概念。首先,我们来看看socket编程,它是网络通信的基础。 **Socket编程**: Socket是网络上的...

    java实现文件加密

    Java中实现文件加密主要涉及以下关键概念和技术: 1. **Java Cryptography Architecture (JCA)**:Java提供了丰富的加密库,包括JCA,它为加密、解密、签名和消息摘要等功能提供了一致的API。JCA的核心组件是`javax...

    基于Java实现的加解密方法(DES、3DES、AES)以及五种分组密码工作模式

    此外,文件的I/O操作也是实现过程中不可或缺的部分,如读取和写入不同格式的文件(如txt、jpg、docx、MP3等)。 总之,这个教程涵盖了对称加密的基础知识,通过Java实践,有助于开发者深入理解加密算法的原理,提高...

    java加密解密zip压缩包

    总结来说,实现“java加密解密zip压缩包”项目,你需要理解Java的IO流、加密API以及如何结合使用这些工具来创建和读取加密的ZIP文件。同时,了解AS3的加密和ZIP处理机制,以便在需要的时候在AS3环境中解密这些文件。...

    java课程设计加密解密

    在Java课程设计中,文件加密和解密是一个重要的实践课题,它涉及到信息安全和数据保护。本文将深入探讨Java实现加密解密的相关知识点,包括加密算法、API使用、自定义加密程序的设计及其应用。 1. 加密算法基础 - ...

    AES算法Java实现对文件加密

    在你提到的湖北工业大学应用密码学期末课程设计中,你可能已经实现了这个过程,创建了一个能够读取文件,使用AES算法加密文件内容,然后保存加密后的数据的应用。这样的应用对于理解和实践密码学原理非常有帮助,...

    java 文件的加密解密操作

    下面我们将深入探讨Java中如何实现文件的加密和解密。 首先,Java提供了丰富的API来处理加密解密,主要在`java.security`和`javax.crypto`包中。其中,`javax.crypto.Cipher`类是核心,用于执行加密和解密操作。它...

    AES JS加密JAVA解密

    总结来说,"AES JS加密JAVA解密"涉及到的是跨语言的加密解密实践,主要依赖于JavaScript的CryptoJS库和Java的`javax.crypto`包。在实际操作中,需要确保两边的加密参数(如密钥、模式和填充方式)一致,同时考虑到...

    文件的加密解密!支持pdf,doc,jpg,txt等----java版

    3. **读取和处理文件**:读取文件内容到字节数组,然后使用Cipher进行加密或解密。 ```java FileInputStream fis = new FileInputStream(file); byte[] fileBytes = new byte[(int) file.length()]; fis.read...

    java 图片base64 加密解密

    在Java编程中,图片Base64加密解密是一种常见的数据处理技术,特别是在网络传输和存储时,由于Base64编码可以将二进制数据转换为可打印的ASCII字符,因此非常适用。`sun.misc.BASE64Encoder`和`sun.misc.BASE64...

    基于JAVA的简单的文件内容分加密解密(窗口化设计)

    本项目提供了一个基于JAVA的简单文件内容加密解密程序,它具有图形化用户界面,使得普通用户也能方便地对文件进行加密和解密操作。以下是关于这个程序的一些关键知识点: 1. **JAVA编程语言**:JAVA是一种广泛使用...

    des加密算法实现任意文件加解密

    在实现文件加解密时,通常需要读取文件的二进制数据,将其转换为字节数组,然后进行加密或解密操作。加密后的数据可以保存到另一个文件中,或者在网络上传输。解密时,从文件读取加密数据,解密后转换回原来的文件...

Global site tag (gtag.js) - Google Analytics