调用DES加密算法包最精要的就是下面两句话:

Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);

CBC是工作模式,DES一共有电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种模式,

PKCS5Padding是填充模式,还有其它的填充模式:

然后,cipher.init()一共有三个参数:Cipher.ENCRYPT_MODE, key, zeroIv,zeroIv就是初始化向量,一个8为字符数组。

工作模式、填充模式、初始化向量这三种因素一个都不能少。否则,如果你不指定的话,那么就要程序就要调用默认实现。问题就来了,这就与平台有关了。

源程序如下(从java平台到Android平台,我根本没有更改一行代码):

另外,一般情况下,加密后的结果都会用base64编码进行传输。

java平台:

主程序

public class testDES {  /** * @param args * @throws Exception  */  public static void main(String[] args) throws Exception {  // TODO Auto-generated method stub  String key = "12345678";  String text = "12345678";  String result1 = DES.encryptDES(text,key);  String result2 = DES.decryptDES(result1, key);  System.out.println(result1);  System.out.println(result2);  }
}  

用到的DES加密类

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class DES {  private static byte[] iv = {1,2,3,4,5,6,7,8};  public static String encryptDES(String encryptString, String encryptKey) throws Exception {
//      IvParameterSpec zeroIv = new IvParameterSpec(new byte[8]);  IvParameterSpec zeroIv = new IvParameterSpec(iv);  SecretKeySpec key = new SecretKeySpec(encryptKey.getBytes(), "DES");  Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");  cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);  byte[] encryptedData = cipher.doFinal(encryptString.getBytes());  return Base64.encode(encryptedData);  }  public static String decryptDES(String decryptString, String decryptKey) throws Exception {  byte[] byteMi = new Base64().decode(decryptString);  IvParameterSpec zeroIv = new IvParameterSpec(iv);
//      IvParameterSpec zeroIv = new IvParameterSpec(new byte[8]);  SecretKeySpec key = new SecretKeySpec(decryptKey.getBytes(), "DES");  Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");  cipher.init(Cipher.DECRYPT_MODE, key, zeroIv);  byte decryptedData[] = cipher.doFinal(byteMi);  return new String(decryptedData);  }
}  

××××××××××××××××××××××××××××××××××××××××

用到的BASE64工具类:

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;  public class Base64 {  private static final char[] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();  /** * data[]进行编码 * @param data * @return */  public static String encode(byte[] data) {  int start = 0;  int len = data.length;  StringBuffer buf = new StringBuffer(data.length * 3 / 2);  int end = len - 3;  int i = start;  int n = 0;  while (i <= end) {  int d = ((((int) data[i]) & 0x0ff) << 16)  | ((((int) data[i + 1]) & 0x0ff) << 8)  | (((int) data[i + 2]) & 0x0ff);  buf.append(legalChars[(d >> 18) & 63]);  buf.append(legalChars[(d >> 12) & 63]);  buf.append(legalChars[(d >> 6) & 63]);  buf.append(legalChars[d & 63]);  i += 3;  if (n++ >= 14) {  n = 0;  buf.append(" ");  }  }  if (i == start + len - 2) {  int d = ((((int) data[i]) & 0x0ff) << 16)  | ((((int) data[i + 1]) & 255) << 8);  buf.append(legalChars[(d >> 18) & 63]);  buf.append(legalChars[(d >> 12) & 63]);  buf.append(legalChars[(d >> 6) & 63]);  buf.append("=");  } else if (i == start + len - 1) {  int d = (((int) data[i]) & 0x0ff) << 16;  buf.append(legalChars[(d >> 18) & 63]);  buf.append(legalChars[(d >> 12) & 63]);  buf.append("==");  }  return buf.toString();  }  private static int decode(char c) {  if (c >= 'A' && c <= 'Z')  return ((int) c) - 65;  else if (c >= 'a' && c <= 'z')  return ((int) c) - 97 + 26;  else if (c >= '0' && c <= '9')  return ((int) c) - 48 + 26 + 26;  else  switch (c) {  case '+':  return 62;  case '/':  return 63;  case '=':  return 0;  default:  throw new RuntimeException("unexpected code: " + c);  }  }  /** * Decodes the given Base64 encoded String to a new byte array. The byte * array holding the decoded data is returned. */  public static byte[] decode(String s) {  ByteArrayOutputStream bos = new ByteArrayOutputStream();  try {  decode(s, bos);  } catch (IOException e) {  throw new RuntimeException();  }  byte[] decodedBytes = bos.toByteArray();  try {  bos.close();  bos = null;  } catch (IOException ex) {  System.err.println("Error while decoding BASE64: " + ex.toString());  }  return decodedBytes;  }  private static void decode(String s, OutputStream os) throws IOException {  int i = 0;  int len = s.length();  while (true) {  while (i < len && s.charAt(i) <= ' ')  i++;  if (i == len)  break;  int tri = (decode(s.charAt(i)) << 18)  + (decode(s.charAt(i + 1)) << 12)  + (decode(s.charAt(i + 2)) << 6)  + (decode(s.charAt(i + 3)));  os.write((tri >> 16) & 255);  if (s.charAt(i + 2) == '=')  break;  os.write((tri >> 8) & 255);  if (s.charAt(i + 3) == '=')  break;  os.write(tri & 255);  i += 4;  }  }  }  

×××××××××××××××××××××××××××××××

adnroid平台的主函数:

public class main extends Activity {  /** Called when the activity is first created. */  @Override  public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.main);  String key = "12345678";  String text = "12345678";  try {  String result1 = DES.encryptDES(text,key);  String result2 = DES.decryptDES(result1, key);  Log.i("DES encode text is ", result1);  Log.i("DES encode text is ", result2);  } catch (Exception e) {  // TODO Auto-generated catch block  e.printStackTrace();  }      }
}  

android des 加密相关推荐

  1. Android Des加密

    DES加密介绍: DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法.DES加密算法出自IBM的研究, 后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为D ...

  2. Android平台和java平台 DES加密解密互通程序及其不能互通的原因

    为什么80%的码农都做不了架构师?>>>    网上的demo一搜一大堆,但是,基本上都是一知半解(包括我).为什么呢?我在尝试分别在两个平台加密的时候,竟然发现Android DE ...

  3. Android DES,AES,RSA加密实现

    DES加密: DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位(每组的第8位作为奇偶校验位),产生最大 64 位的分组大小.这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将 ...

  4. iOS:DES加密iOS和Android的匹配

    android端的加密代码: public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding";private s ...

  5. des加密 ios 和java_三重Des对称加密在Android、Ios 和Java 平台的实现

    // //  CommonFunc.m //  PRJ_base64 // //  Created by wangzhipeng on 12-11-29. //  Copyright (c) 2012 ...

  6. IOS、java支持DES加密

    最近在考虑数据加密方面的需求,所以对数据加密简单的看了一下,当然不是看的原理,只是看看怎么能够实现.现在我们需要实现的是移动端和后台(java)数据加解密的配合,开始的时候考虑的使用RSA,因为RSA ...

  7. Android安全加密:对称加密

    Android安全加密专题文章索引 Android安全加密:对称加密 Android安全加密:非对称加密 Android安全加密:消息摘要Message Digest Android安全加密:数字签名 ...

  8. android 对称加密和非对称加密,Android开发加密之对称与非对称加密算法使用案例.pdf...

    Android开发加密之对称与非对称加密算法使用案例 消息摘要 md5:登录注册, sha1 对称加密  1.des:Data Encryption Standard,数据加密标准  2.aes: ...

  9. des加密+base64编码,base64解码+des解密

    des加密+base64编码,base64解码+des解密 des简单介绍 base64简单介绍 运行效果图 TestActivity.java DataEncryptionUtil.java des ...

  10. Android RSA加密解密的 工具类的使用

    RSA 比较特殊,我们首先要生成私钥和公钥,然后在加密的时候,使用私钥加密,在解密的时候使用公钥解密. //RSA 的初始化,获得私钥和密钥public void rsaInit(){try {Key ...

最新文章

  1. pyqt5 QtDesigner文件打开位置
  2. 你家猫砸东西是不是也专挑贵的砸?
  3. html 存储登录状态,Vue中保存用户登录状态实例代码
  4. 正则不等于一个字符串_乳饮料不等于酸奶,记住一个关键词,花最少的钱买到真正的好酸奶...
  5. Qt图形界面编程入门(Qt的历史、Qt安装资源链接、Qt Creator简介)
  6. Unix——系统调用和库函数调用概念区别和联系
  7. 以太坊上DeFi协议总锁仓量环比上升4.37%
  8. 自动驾驶公司 | 纵目科技完成D轮1.9亿美元融资
  9. python学习笔记之lambda表达式
  10. matlab 生成连续信号,Matlab的连续信号生成及时频域分析
  11. 负载均衡 一直跑一个服务器_终于把服务器负载均衡和客户端负载均衡讲清楚了...
  12. 跟据URL来实现WebService
  13. 使用NewtonSoft.JSON.dll来序列化和发序列化对象
  14. Python获取图片的大小/尺寸
  15. Qt_IOS环境搭建 Qt for ios Projector ERROR:This mkspec requires Xcode 4.3 or later
  16. 64位java没有javaw.exe,2019-01-01 eclipse无法找到javaw.exe怎么处理
  17. MySQL复制之gtid_purged与gtid_executed
  18. 自制冰箱,冰柜蒸发器和毛细管的速算
  19. 实现外网Ping通WSL(网卡桥接方式实现)
  20. 4043:GPA排名系统

热门文章

  1. 关于以太网没有有效的ip配置问题解决方法
  2. JSP文件的打开方式
  3. php格林威治时间,时间戳与格林威治时间互相转换
  4. 那个小白说他还没搞懂类和对象,我一怒之下把这篇文章扔给了他
  5. knife4j文档-个人笔记
  6. CF446C DZY Loves Fibonacci Numbers 万能的线段树
  7. Classic Shell不起作用(失效)的解决
  8. DMSP/OLS夜间灯光遥感影像数据概述
  9. jena java,Apache Jena Java工具箱
  10. 【Turtlrbot3-burger】从零开始配置Turtlrbot3小车1