java实现的DES加密算法详解
发布时间 - 2026-01-11 02:03:16 点击率:次本文实例讲述了java实现的DES加密算法。分享给大家供大家参考,具体如下:

一、DES加密算法介绍
1、要求密钥必须是8个字节,即64bit长度
2、因为密钥是byte[8] , 代表字符串也可以是非可见的字节,可以与Base64编码算法一起使用
3、加密、解密都需要通过字节数组作为数据和密钥进行处理
二、对称加密
DES加密算法属于对称加密。
即利用指定的密钥,按照密码的长度截取数据,分成数据块,和密钥进行复杂的移位、算数运算或者数据处理等操作,形成只有特定的密码才能够解开的数据。 加密与解密用的是同一个密钥
三、相关类
1、Cipher:
Java/Android要使用任何加密,都需要使用Cipher这个类
使用Cipher进行加密,解密处理,需要创建实例对象并初始化。采用工厂模式创建对象
Cipher cipher = Cipher.getInstance("算法名称");
cipher.init(加密/解密模式,Key秒);
2、Key:
Key类是Java加密系统所有密码的父类
3、SecretKeyFactory:
对于DES加密解密,使用SecretKeyFactory生成,生成时需指定DESKeySpec
四、加密代码步骤
1. 获取Cipher对象,设置加密算法
Cipher cipher = Cipher.getInstance("DES");
2、准备Key对象
2.1 DES加密算法使用DESKeySpec类,构造方法参数需要为8个字节的密码
创建DESKeySpec类对象
参数为密钥,8个字节
DESKeySpec keySpec = new DESKeySpec(new byte[1,2,3,4,5,6,7,8]);
2.2 转换成Key对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("EDS");
SecretKey key = keyFactory.generateSecret(keySpec);
3.设置Cipher模式,加密/解密 ,参数一 :模式 ,参数二:Key对象,返回字节数组
Cipher.DECRYPT_MODE 解密
Cipher.ENCRYPT_MODE 加密
cipher.init(Cipher.ENCRYPT_MODE,key);
4.返回加密结果,参数为加密内容
bytep[] ret = cipher.doFinal(data);
因为对称加密加密与解密是相逆的。所以解密步骤和加密步骤一样,只是cipher.init()的模式不同,所以我们可以写一个工具类来进行DES加密算法的加密解密
DES加密算法工具类
/**
* DES加密算法
* @param mode 模式: 加密,解密
* @param data 需要加密的内容
* @param keyData 密钥 8个字节数组
* @return 将内容加密后的结果也是byte[]格式的
*/
public static byte[] des(int mode,byte[] data,byte[] keyData)
{
byte[] ret = null;
//加密的内容存在并且密钥存在且长度为8个字节
if (data != null
&& data.length>0
&&keyData!=null
&& keyData.length==8) {
try {
Cipher cipher = Cipher.getInstance("DES");
DESKeySpec keySpec = new DESKeySpec(keyData);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = keyFactory.generateSecret(keySpec);
cipher.init(mode, key);
ret = cipher.doFinal(data);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
}
return ret;
}
//DES 加密
public static byte[] desEncrypt(byte[] data,byte[] keyData){
return des(Cipher.ENCRYPT_MODE,data,keyData);
}
//DES 解密
public static byte[] desDecrypt(byte[] data,byte[] keyData){
return des(Cipher.DECRYPT_MODE,data,keyData);
}
五、示例
SythEncryptActivity.class:
package com.xqx.encrypsthow;
import android.app.Activity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import utils.EncryptUtil;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.Arrays;
/**
* Created by Administrator on 2015/10/16.
*/
/**
* 对称加密
*/
public class SythEncryptActivity extends Activity {
private EditText txtContent;
private EditText txtPassword;
private EditText txtResult;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sythencrypylayout);
txtContent = (EditText) findViewById(R.id.txt_content);
txtPassword = (EditText) findViewById(R.id.txt_password);
txtResult = (EditText) findViewById(R.id.txt_result);
}
/**
* DES加密,要求密码必须8个字节,64bit长度 byte[8]
* @param view
*/
public void btnDESEncrypt(View view) {
//获取需要加密的内容
String content = txtContent.getText().toString();
//获取密钥
String password = txtPassword.getText().toString();
//注意,加密,解密,秘钥都需要是字节数组
byte[] keyData = password.getBytes();
//需要加密的内容
byte[] contentData = content.getBytes();
if(keyData.length == 8) {
byte[] encryptedData = EncryptUtil.des(Cipher.ENCRYPT_MODE, contentData, keyData);
//获取加密后的数据(记住是byte[]类型的),用Base64编码 成可见的字符串形式
String s = Base64.encodeToString(encryptedData, Base64.NO_WRAP);
//显示加密后的内容
txtResult.setText(s);
}
}
/**
* DES的解密
* @param view
*/
public void btnDESDecrypt(View view) {
String encryptedStr = txtResult.getText().toString();
if(encryptedStr.length()>0){
String password = txtPassword.getText().toString();
//因为在加密方法中,使用Base64对加密的内容进行编码,要解密的时候需要Base64的解码
byte[] encryptedData = Base64.decode(encryptedStr, Base64.NO_WRAP);
byte[] keyData = password.getBytes();
//DES 要求 8个字节
if(keyData.length == 8){
//形成原始数据
byte[] decryptedData = EncryptUtil.des(Cipher.DECRYPT_MODE, encryptedData, keyData);
txtResult.setText(new String(decryptedData));
}
}
}
}
layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/txt_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入内容"
/>
<EditText
android:id="@+id/txt_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="DES密钥"
android:text="12345678"
android:inputType="textVisiblePassword"
/>
<EditText
android:id="@+id/txt_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DES加密"
android:onClick="btnDESEncrypt"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DES解密"
android:onClick="btnDESDecrypt"
/>
</LinearLayout>
工具类参考 四:加密代码步骤
效果图:
PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:
MD5在线加密工具:
http://tools./password/CreateMD5Password
迅雷、快车、旋风URL加密/解密工具:
http://tools./password/urlrethunder
在线散列/哈希算法加密工具:
http://tools./password/hash_encrypt
在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools./password/hash_md5_sha
在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools./password/sha_encode
更多关于java相关内容感兴趣的读者可查看本站专题:《Java数学运算技巧总结》、《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
# java
# DES
# 加密算法
# 利用JAVA实现DES加密算法
# java实现MD5加密算法的实例代码
# 分享Java常用几种加密算法(四种)
# java实现的AES加密算法完整实例
# Java 对称加密几种算法分别实现
# 基于java实现的ECC加密算法示例
# Java实现常用加密算法SM3的方式及测试代码
# 加密工具
# 感兴趣
# 加密解密
# 的是
# 操作技巧
# 相关内容
# 还可以
# 我们可以
# 数据结构
# 给大家
# 请输入
# 数据处理
# 转换成
# 更多关于
# 才能够
# 所述
# 要使
# 程序设计
# 时需
# 长度为
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
香港服务器网站推广:SEO优化与外贸独立站搭建策略
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
EditPlus中的正则表达式实战(5)
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
EditPlus中的正则表达式 实战(2)
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
海南网站制作公司有哪些,海口网是哪家的?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
简单实现Android验证码
如何在阿里云服务器自主搭建网站?
PHP正则匹配日期和时间(时间戳转换)的实例代码
微信公众帐号开发教程之图文消息全攻略
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
如何用VPS主机快速搭建个人网站?
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
如何在万网ECS上快速搭建专属网站?
Laravel如何使用Collections进行数据处理?(实用方法示例)
如何实现javascript表单验证_正则表达式有哪些实用技巧
三星、SK海力士获美批准:可向中国出口芯片制造设备
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
如何做网站制作流程,*游戏网站怎么搭建?
怎样使用JSON进行数据交换_它有什么限制
android nfc常用标签读取总结
香港服务器网站卡顿?如何解决网络延迟与负载问题?
JavaScript如何实现倒计时_时间函数如何精确控制
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
高性价比服务器租赁——企业级配置与24小时运维服务
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
利用 Google AI 进行 YouTube 视频 SEO 描述优化
网页设计与网站制作内容,怎样注册网站?
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
如何在搬瓦工VPS快速搭建网站?
Laravel怎么为数据库表字段添加索引以优化查询
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何用虚拟主机快速搭建网站?详细步骤解析
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
如何在IIS管理器中快速创建并配置网站?
Laravel如何创建自定义中间件?(Middleware代码示例)
Laravel如何处理表单验证?(Requests代码示例)
上一篇:Debian PHP如何编写扩展
下一篇:深圳网站推广优化策略详解
上一篇:Debian PHP如何编写扩展
下一篇:深圳网站推广优化策略详解

