android网络安全
2016-05-26 14:40
459 查看
1.ssl(网络安全)
2.sqliste(数据库安全)
3.代码安全—使用jni技术,对敏感代码才有c/c++实现
4.接入权限
5.数字证书
其中—网络安全:通过加密算法等实现{
(对称加密DES,AES,非对称加RSA,单向加密MD5)}
2.sqliste(数据库安全)
3.代码安全—使用jni技术,对敏感代码才有c/c++实现
4.接入权限
5.数字证书
其中—网络安全:通过加密算法等实现{
(对称加密DES,AES,非对称加RSA,单向加密MD5)}
md5 public class MD5 { /*** * MD5加密 生成32位md5码 * @return 返回32位md5码 */ public static String md5Encode(String inStr) throws Exception { MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5"); } catch (Exception e) { System.out.println(e.toString()); e.printStackTrace(); return ""; } byte[] byteArray = inStr.getBytes("UTF-8"); byte[] md5Bytes = md5.digest(byteArray); StringBuffer hexValue = new StringBuffer(); for (int i = 0; i < md5Bytes.length; i++) { int val = ((int) md5Bytes[i]) & 0xff; if (val < 16) { hexValue.append("0"); } hexValue.append(Integer.toHexString(val)); } return hexValue.toString(); } }
我发现解密有问题 ,你们看看我哪里错了 public class DES { //初始化向量,随意 private static byte[] iv ={1,2,3,4,5,6,7,8}; //des加密 //encryptString为原文 //encrytKey为密钥 //返回加密后的密文 public static String encryptDES(String encryptString,String encrytKey)throws Exception{ //实例化IvParameterSpec对象,使用指定的初始化向量 IvParameterSpec zeroIv = new IvParameterSpec(iv); //实例化类SecretKeySpec ,根据字节数组来构造encrytKey SecretKeySpec keySpec = new SecretKeySpec(encrytKey.getBytes(),"DES"); //创建密码器 Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); //用密尺初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE,keySpec,zeroIv); //执行加密操作 byte[] encryptedData =cipher.doFinal(encryptString.getBytes()); //返回加密后的数据 return Base64.encodeToString(encryptedData,Base64.DEFAULT); } //DES解密 //encryptString为原文 //encrytKey为密钥 //返回解密后的密文 public static String decryptDES(String decryptString,String decryptKey)throws Exception{ //先使用Base64解密 byte[] byteMI = Base64.decode(decryptString,Base64.DEFAULT); //实例化IvParameterSpec对象,使用指定的初始化向量 IvParameterSpec zeroIv = new IvParameterSpec(iv); //实例化类SecretKeySpec ,根据字节数组来构造decryptKey SecretKeySpec key = new SecretKeySpec(decryptKey.getBytes(),"DES"); //创建密码器 Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); //用密尺初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE,key,zeroIv); //获取解密的数据 byte[] decryptedData=cipher.doFinal(byteMI); //解密数据转换为字符串输出 return new String(decryptedData,"UTF-8"); } /** * 下面是调用代码 * //指定密钥 * String key = "123456" * //需要加密的明文 *String text ="abcdef" * * String encryptResult=DES.encryptDES(text,key); * String decryptResult=DES.decryptDES(encryptResult,key); * * Log打印 * * */ }
我发现解密有问题 ,你们看看我哪里错了 public class AES { //AES加密 //cleartext为需要加密的内容 //seed为密钥 public static String encrypt(String seed,String cleartext)throws Exception{ //对密钥进行编码 byte[] rawKey = getRawKey(seed.getBytes()); //加密数据 byte[] result=encrypt(rawKey,cleartext.getBytes()); //将十进制数转换为十六进制数 return toHex(result); } //对密钥进行编码 private static byte[] getRawKey(byte[] seed) throws Exception{ //获取密尺生产器 KeyGenerator kgen = KeyGenerator.getInstance("AES"); SecureRandom sr=SecureRandom.getInstance("SHA1PRNG"); sr.setSeed(seed); //生成128位的AES密码生成器 kgen.init(128,sr); //生成密尺 SecretKey skey=kgen.generateKey(); //编码格式 byte[] raw=skey.getEncoded(); return raw; } //加密 private static byte[] encrypt(byte[] rawKey, byte[] clear) throws Exception{ //生成一组扩展密钥,并放入数组中 SecretKeySpec skeySpec= new SecretKeySpec(rawKey,"AES"); Cipher cipher=Cipher.getInstance("AES"); //用ENCRYPT_MODE模式,用skeySpec密码组,生成AES加密方法 cipher.init(Cipher.ENCRYPT_MODE,skeySpec); //得到加密数据 byte[] encryted= cipher.doFinal(clear); return encryted; } //将十进制数转换为十六进制数 private static String toHex(byte[] buf) { if(buf==null) return ""; StringBuffer result = new StringBuffer(2*buf.length); for (int i=0;i<buf.length;i++){ addendHex(result,buf[i]); } return result.toString(); } private final static String HEX="0123456789ABCDEF"; private static void addendHex(StringBuffer result, byte b) { result.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f)); } //AES解密 //encrypted为需要解密的内容 //seed为密钥 public static String decrypt(String seed,String encrypted)throws Exception{ //对密钥进行编码 byte[] rawKey= getRawKey(seed.getBytes()); byte[] enc=toByte(encrypted); byte[] result=decrypt(rawKey,enc); return new String(result); } //将十六进制字符串转换为十进制字节s数组 private static byte[] toByte(String hexStirng) { int len=hexStirng.length()/2; byte[] result=new byte[len]; for(int i=0;i<len;i++) result[i]=Integer.valueOf(hexStirng.substring(2*i,2*i+2),16).byteValue(); return result; } //解密 private static byte[] decrypt(byte[] rawKey, byte[] enc)throws Exception { //生成一组扩展密钥,并放入一个数组之中 SecretKeySpec skeySpec= new SecretKeySpec(rawKey,"AES"); Cipher cipher=Cipher.getInstance("AES"); //用ENCRYPT_MODE模式,用skeySpec密码组,生成AES解密方法 cipher.init(Cipher.ENCRYPT_MODE,skeySpec); //得到解密数据 byte[] encrypted=cipher.doFinal(enc); return encrypted; } //将十进制数转换为十六进制 public static String toHex(String txt){ return toHex(txt.getBytes()); } //将十六进制字符串转换为十进制字符串 public static String fromHex(String hex){ return new String(toByte(hex)); } /* 调用 //密钥 String mesterPassword="Android"; //设置原文 String originalText="abc"; //加密 String en=AES.encrypt(mesterPassword,originalText); //解密 String decryptingCode= AES.decrypt(mesterPassword,en); */ }
相关文章推荐
- Android网络开发之实时获取最新数据
- BP神经网络
- Android studio加载网络权限
- android 判断当前环境网络是否可用及获取当前网络类型
- 使用ICMP协议Ping网络主机
- https 双向认证
- Volley框架的基本解读(八)
- Android 中 HttpURLConnection 使用详解
- HTTP缓存技术,304(Not Modified)和200(from cache)区别
- HTTP客户端操作工具类
- http - referer
- 各类 HTTP 返回状态代码详解
- TCP沾包解包(3)
- 负载平衡问题[网络流24题之19]
- 网络工具类
- Andriod开发 网络状态改变监听(这样说可能不太合理)
- TCP沾包解包(2)
- Linux下使用iptables禁止指定IP地址的网络连接
- http长连接
- erlang http post and get 请求