android -------- DES加密解密算法

DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。

DES加密介绍
DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究,
后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,
24小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现

注意:DES加密和解密过程中,密钥长度都必须是8的倍数

网上写法也有很多种,我只是随便弄一种

/**
     * 使用DES对字符串加密
     *
     * @param str
     *            utf8编码的字符串
     * @param key
     *            密钥(56位,7字节)
     *
     */
    public static byte[] desEncrypt(String str, String key) throws Exception {
        if (str == null || key == null)
            return null;
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "DES"));
        byte[] bytes = cipher.doFinal(str.getBytes("utf-8"));
        return bytes;
    }

    /**
     * 使用DES对数据解密
     *
     * @param bytes
     *            utf8编码的二进制数据
     * @param key
     *            密钥(16字节)
     * @return 解密结果
     * @throws Exception
     */
    public static String desDecrypt(byte[] bytes, String key) throws Exception {
        if (bytes == null || key == null)
            return null;
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "DES"));
        bytes = cipher.doFinal(bytes);
        return new String(bytes, "utf-8");
    }

    /**
     * 使用base64解决乱码
     *
     * @param secretKey
     *            加密后的字节码
     */
    public static String jdkBase64String(byte[] secretKey) {
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(secretKey);
    }

    /**
     * 使用jdk的base64 解密字符串 返回为null表示解密失败
     *
     * @throws IOException
     */
    public static byte[] jdkBase64Decoder(String str) throws IOException {
        BASE64Decoder decoder = new BASE64Decoder();
        return decoder.decodeBuffer(str);
    }

使用Base64 避免加密乱码

 //测试
    public static void main(String args[]) {
try {
            String openId = jdkBase64String(desEncrypt("Hello 小笨蛋", "12345678"));
            System.out.println(openId);
            String desDecrypt = desDecrypt(jdkBase64Decoder(openId), "12345678");
            System.out.println(desDecrypt);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

日志:

原文地址:https://www.cnblogs.com/zhangqie/p/10980089.html

时间: 2024-08-25 09:13:43

android -------- DES加密解密算法的相关文章

DES加密解密算法

DES加密解密算法 // 仿射变换加解密.cpp : 定义控制台应用程序的入口点. // #include <stdio.h> #include <conio.h> static char key[10], key_a[5], code[8], key_b[5], temp[10], key_aa[8], key_bb[8], l[4], r[4], l_a[4], r_a[4], V[8] = { 0, 1, 0, 1, 0, 1, 0, 1 }, b[8]; char Code

java 实现 DES加密 解密算法

DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据:Mode为DES的工作方式,有两种:加密或解密.  DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果:如 Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果.在通信网络的两端,双方约定一致

javascript DES加密解密算法

原文:javascript DES加密解密算法 源代码下载地址:http://www.zuidaima.com/share/1550463672044544.htm javascript DES加密解密算法,java通过ScriptEngineManager调用的例子. 源码截图:

用JAVA实现的DES加密解密算法

package Encrypt; import java.security.*; import javax.crypto.*; import sun.misc.*; /** * 使用DES加密与解密,可对byte[],String类型进行加密与解密 * 密文可使用String,byte[]存储. * 方法: * void getKey(String strKey)从strKey的字条生成一个Key * String getEncString(String strMing)对strMing进行加密

DES加密解密算法C语言代码实现

代码: 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 /*------------------------ 5 定义枚举型全局变量 6 ------------------------*/ 7 typedef enum 8 { 9 false = 0, 10 true = 1 11 } bool; 12 13 // 十六轮子密钥 14 static bool SubKey[16][48]=

android -------- Base64 加密解密算法

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RFC2049,上面有MIME的详细规范. Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息.例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数.在其他应

DES加密解密-&gt;java实现

DES加密解密涉及到的JAVA类 Cipher 此类为加密和解密提供密码功能.它构成了 Java Cryptographic Extension (JCE) 框架的核心. 为创建 Cipher 对象,应用程序调用 Cipher 的 getInstance 方法并将所请求转换 的名称传递给它.还可以指定提供者的名称(可选). 转换 是一个字符串,它描述为产生某种输出而在给定的输入上执行的操作(或一组操作).转换始终包括加密算法的名称(例如,DES),后面可能跟有一个反馈模式和填充方案. 转换具有以

java/php DES/CBC/PKCS5Padding加密解密算法实现过程

先看java代码 Java代码   public static String encrypt(String message, String key) throws Exception { Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8")); SecretKeyFactory k

des加密解密——java加密,php解密

最近在做项目中,遇到des加密解密的问题. 场景是安卓app端用des加密,php这边需要解密.之前没有接触过des这种加密解密算法,但想着肯定会有demo.因此百度,搜了代码来用.网上代码也是鱼龙混杂,好不容易测试在php这边测试加密和解密成功了.为确保安卓app端提交过来的加密参数能够解密出来,给定安卓人员一个字符串,让他们把des加密后的字符串给我,在php这边解密.结果一看,加密出来的字符串跟我这边加密出来的结果不一致,自然是解密不出来. 要来java的des算法代码,研究加密的过程,其