Android与其他系统间DES加密解密的处理经验

在软件开发中,各系统间经常要进行数据交互,基于安全考虑都会进行数据加密。
由于不同的开发环境,编程语言导致加密解密经常出现问题。
我在开发Android与C#程序之间的数据交互时也遇到了这个问题,
C#系统采用DES加密字符串,Android用DES解密就是不成功,从网上搜了许多源码都不能用,现将处理经验与大家分享一下。

一、
  以下代码为Android加密的核心语句:
  Cipher cipher = Cipher.getInstance( "DES/ECB/NoPadding" );  
  其中的参数含义为:DES为加密算法,ECB为加密模式,NoPadding为填充模式

  当你采用这种写法时Cipher cipher = Cipher.getInstance( "DES" ),系统将采用默认参数DES/CBC/PKCS5Padding。

二、
  Cipher类为加密和解密提供密码功能,转换始终包括加密算法的名称(例如,DES),后面可能跟有一个加密模式和填充方案。
  Cipher.getInstance的参数格式:"加密算法/加密模式/填充模式" 或  "算法"

三、
  常用加密算法:
  DES、3DES、RC4、AES等;
  加密模式:
  ECB、CBC、CFB、OFB等;
  填充模式:
  NoPadding、PKCS1Padding、PKCS5Padding、PKCS7Padding;

四、
  以上不同参数的组合将生成完全不同的密文。
  我就是用不同的参数组合一个个测试,才最终解决加解密的问题。
  以下加密参数我都试了一遍。
  DES/CBC/PKCS5Padding,
  DES/CFB/PKCS5Padding,
  DES/ECB/PKCS5Padding,
  DES/OFB/PKCS5Padding,
  DES/CFB/NoPadding,
  DES/CBC/NoPadding,
  DES/ECB/NoPadding,
  DES/OFB/NoPadding,
  最后使用参数"DES/ECB/NoPadding", 才出现了一线曙光。
  其中的加密模式ECB安全性较差,目前新的平台中都较少用了,但是早期其他语言开发的系统就会使用这种模式。

五、
  这时发现有些明文加密后返回值为null,原来是明文的长度必须为8的倍数。
  增加一个while循环填充空格就可以了。
  当你处理其他系统间的加密解密数据交互时,也可以参考一下。

  源代码下载地址:http://download.csdn.net/detail/marko39/8013335


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值