数据加密传输
来源:互联网 发布:怎么与网络管理员联系 编辑:程序博客网 时间:2024/05/10 05:31
背景
最近做的一个项目,用到了数据加密传输,我们用AES加密的时候要用到base64编码,但是android的base64和java的base64不一致,一开始我和java服务端用同一个jar包下的base64,在android下会报FileNotFoundException,经过研究之后,这个问题解决了,但是又有个新异常,忘了是什么了,最后的解决办法是我用android下的base64,他还是用原来的,顺利解决了。
当然还有一些问题,那么产生这些问题的根源在哪儿呢,其实在跟其他服务器交互的时候难免也产生了一些问题,尤其是调试的时候,如果在Linux下还好,Windows调试的时候这种问题就会经常出现,包括对图片的处理等等。
Android本身是Linux内核,和Windows有很多细节上的区别,比如最常用的转义符,一个是\,一个是/,还有对图片处理的时候,宽和高有时候会有些出入。
正题
正经点,码农说代码:
一般情况下,登录密码只需要MD5加密就可以了,但是对一些敏感数据,通常情况下是先用AES加密,再用MD5对密钥进行加密,以保证安全性
AES
AES是一种可逆加密算法,对用户的敏感信息加密处理 对原始数据进行AES加密后,在进行Base64编码转化,经测试,直接用android的Base64完全可以在java环境下直接解密。
package com.cyyz.util;import java.util.Arrays;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import android.util.Base64;/** * AES 是一种可逆加密算法,对用户的敏感信息加密处理 对原始数据进行AES加密后,在进行Base64编码转化; * @author jty */public class AESOperator { // 加密 public static String encrypt(String src, String key) { SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES"); IvParameterSpec iv = new IvParameterSpec(Arrays.copyOfRange(key.getBytes(), 0, 16));// try { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv); byte[] encrypted = cipher.doFinal(src.getBytes("utf-8")); return Base64.encodeToString(encrypted, Base64.DEFAULT);// 此处使用BASE64做转码。 } catch (Exception e) { e.printStackTrace(); return null; } } // 解密 public static String decrypt(String src, String key) { SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES"); IvParameterSpec iv = new IvParameterSpec(Arrays.copyOfRange(key.getBytes(), 0, 16));// try { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); byte[] encrypted1 = Base64.decode(src, Base64.DEFAULT);// 先用base64解密 byte[] original = cipher.doFinal(encrypted1); String originalString = new String(original, "utf-8"); return originalString; } catch (Exception ex) { ex.printStackTrace(); return null; } }}
MD5
MD5即信息摘要算法5,用于确保信息传输完整一致,是一种不可逆杂凑算法,也是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法)。
import java.security.MessageDigest;/** * MD5Utils * @author jty */public class MD5Utils { public final static String md5(String s) { char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; try { byte[] btInput = s.getBytes(); MessageDigest mdInst = MessageDigest.getInstance("MD5"); mdInst.update(btInput); byte[] md = mdInst.digest(); int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); } catch (Exception e) { return null; } }}
其他算法
常用的其他算法通常还有DES,RSA等,一般如果不是申请国密资质或者商用密码的公司,会用就行了,比如我这种数学渣渣。
多谢观赏!
0 0
- Nodejs 数据加密传输
- 数据加密传输
- 表单数据的加密传输
- 表单数据的加密传输
- 表单数据的加密传输
- Android网络数据加密传输
- 网络传输数据如何加密
- C#实现网络传输数据加密
- 网络传输数据的加密和编码
- java AES128加密压缩 模拟传输数据
- Oracle设置使用加密方式传输数据
- Android传输数据时加密详解
- Android传输数据时加密详解
- Android传输数据时加密详解
- vsftp实现ftps加密传输数据
- C#实现网络传输数据加密
- 自定义网络传输数据加密与解密
- 数据网络传输加密解密问题
- react native(八)加载网络数据 和chrome
- 新人报到
- 2016-12-03 Mongo一致性
- Java并发编程规则:设计线程安全的类
- 51Nod-背包问题V2(多重背包+二进制优化)
- 数据加密传输
- Eclipse使用ButterKinfe
- nginx日志解析
- DB2频繁出现死锁,常用解决问题的命令
- bzoj 3261 (可持久化trie树)
- java enum(枚举)使用详解 + 总结
- Xstream使用小结
- openstack的openvswitch的问题
- docker 部署nginx