在运营某些项目时,我们可能需要使用到第三方的服务器来存储数据和文件,对于文本的加密,我们可以用很多简单的对称算法,比如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个字节的内容再进行与操作,就得到了加密前的内容。
相关推荐
Java 实现文件的加密与解密是指利用 Java 语言将资源文件(包括图片、动画等类型)进行简单的加密和解密。这种策略的原因和好处是将准备好的资源存储在云上,使用时通过网络进行读取即可,减少了应用程序本身的大小...
在IT领域,文件的安全性是至关重要的,尤其是在网络传输、存储和共享时。"加密和解密文件"的主题涉及到信息安全的核心技术,它确保了数据在未经授权的情况下无法被访问或理解。这里的描述提到这是一个带有图形用户...
本文将深入探讨如何使用AES实现文件的加密和解密过程。 首先,理解AES的基本原理至关重要。AES是一种块密码,它将数据分块进行处理,标准块大小为128位。加密和解密过程都基于一系列复杂的数学运算,包括字节替换、...
文档"登录前端加密后端解密.docx"可能包含了详细的步骤、代码示例和解释,以指导开发者如何实施这个流程。例如,它可能涵盖了如何配置jsencrypt.js,如何在JAVA后端导入和使用RSA密钥,以及如何正确地进行MD5散列等...
本文将深入探讨如何使用Java语言结合RSA算法,通过数字证书实现文件的加密和解密操作。RSA是一种非对称加密算法,它的核心在于一对密钥:公钥和私钥。公钥可以公开给任何人,用于加密数据;而私钥必须保密,用于解密...
本程序利用Java的IO流操作,实现了用户自定义密码对文件进行加密和解密的功能,确保了数据的隐私性和完整性。 首先,我们需要了解Java中的IO流。IO流是Java提供的处理输入输出操作的一系列类,分为字节流(处理原始...
RSA是一种非对称加密算法,它的核心在于一对公钥和私钥,用于加密和解密数据,确保即使数据在网络中传输,也能防止被未经授权的第三方读取。 标题中的"C#实现RSA加密,JAVA实现解密",意味着我们将使用C#来生成RSA...
在本文中,我们将深入探讨如何使用Java来模仿QQ通信,并实现RSA加密解密技术,同时涉及多客户端连接和消息安全性的关键概念。首先,我们来看看socket编程,它是网络通信的基础。 **Socket编程**: Socket是网络上的...
本文将深入探讨Java中实现文件加密和解密的基本原理和技术。 1. **基本概念** - **加密**:是指将可读的数据(明文)转换为不可读的形式(密文),以防止未经授权的访问。 - **解密**:是加密的逆过程,将密文...
Java中实现文件加密主要涉及以下关键概念和技术: 1. **Java Cryptography Architecture (JCA)**:Java提供了丰富的加密库,包括JCA,它为加密、解密、签名和消息摘要等功能提供了一致的API。JCA的核心组件是`javax...
此外,文件的I/O操作也是实现过程中不可或缺的部分,如读取和写入不同格式的文件(如txt、jpg、docx、MP3等)。 总之,这个教程涵盖了对称加密的基础知识,通过Java实践,有助于开发者深入理解加密算法的原理,提高...
总结来说,实现“java加密解密zip压缩包”项目,你需要理解Java的IO流、加密API以及如何结合使用这些工具来创建和读取加密的ZIP文件。同时,了解AS3的加密和ZIP处理机制,以便在需要的时候在AS3环境中解密这些文件。...
在Java课程设计中,文件加密和解密是一个重要的实践课题,它涉及到信息安全和数据保护。本文将深入探讨Java实现加密解密的相关知识点,包括加密算法、API使用、自定义加密程序的设计及其应用。 1. 加密算法基础 - ...
在你提到的湖北工业大学应用密码学期末课程设计中,你可能已经实现了这个过程,创建了一个能够读取文件,使用AES算法加密文件内容,然后保存加密后的数据的应用。这样的应用对于理解和实践密码学原理非常有帮助,...
下面我们将深入探讨Java中如何实现文件的加密和解密。 首先,Java提供了丰富的API来处理加密解密,主要在`java.security`和`javax.crypto`包中。其中,`javax.crypto.Cipher`类是核心,用于执行加密和解密操作。它...
总结来说,"AES JS加密JAVA解密"涉及到的是跨语言的加密解密实践,主要依赖于JavaScript的CryptoJS库和Java的`javax.crypto`包。在实际操作中,需要确保两边的加密参数(如密钥、模式和填充方式)一致,同时考虑到...
3. **读取和处理文件**:读取文件内容到字节数组,然后使用Cipher进行加密或解密。 ```java FileInputStream fis = new FileInputStream(file); byte[] fileBytes = new byte[(int) file.length()]; fis.read...
在Java编程中,图片Base64加密解密是一种常见的数据处理技术,特别是在网络传输和存储时,由于Base64编码可以将二进制数据转换为可打印的ASCII字符,因此非常适用。`sun.misc.BASE64Encoder`和`sun.misc.BASE64...
本项目提供了一个基于JAVA的简单文件内容加密解密程序,它具有图形化用户界面,使得普通用户也能方便地对文件进行加密和解密操作。以下是关于这个程序的一些关键知识点: 1. **JAVA编程语言**:JAVA是一种广泛使用...
在实现文件加解密时,通常需要读取文件的二进制数据,将其转换为字节数组,然后进行加密或解密操作。加密后的数据可以保存到另一个文件中,或者在网络上传输。解密时,从文件读取加密数据,解密后转换回原来的文件...