Java数据的简单加密 DES方式

1.数据在网络中传输时,需要进行加密处理

双方约定一个相同的key(key不在网络中进行传输,只传输加密数据),然后根据将key根据一定的DES规则转换,得到真正的key,在进行加密和解密,为了增加安全性,加密过程中再加上编码base64转换,解密时先解码base64

加密和解密的完整的代码:

package com.cmit.hall.plat.play.utils;

import java.security.GeneralSecurityException;
import java.security.Key;
import java.util.Base64;

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;

/**
 * 数据加密 DES方式 + Base64
 * @author sun_flower
 *
 */
public class EncryUtils {
    public static final String KEY = "gEpCIKFVdPEBJ1pM5pLSviM2Nrj5C/A4iAw8ou+jiJpnrXigolapdcJXfmh2tECyuQnaFrvZHabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmn";
    /**
     * 测试
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        Key convertSecretKey = generateSecret(KEY);
        String data = "{\"code\":\"100\",\"roleId\":[],\"userDesc\":\"测试\",\"sessionId\":\"90EA80C89F6187BAB363C9347F759E39\",\"roleList\":[],\"userName\":\"chenpeng\",\"checkCode\":\"\",\"token\":\"\",\"password\":\"eFEBcXRwTW2oMFSDwGwUKQ==\",\"createTime\":\"2019-05-27 15:30:14\",\"levelId\":\"1\",\"staffName\":\"\",\"id\":1502,\"userType\":\"1\",\"oldPwd\":\"\"}";
        String enStr = encodeString(convertSecretKey, data);
        decodeString(convertSecretKey, enStr);
    }
    /**
     * 转换key
     * @param key
     * @return
     * @throws GeneralSecurityException
     */
    public static Key generateSecret(String key) throws GeneralSecurityException {
        byte[] bytesKey = key.getBytes();
        DESKeySpec desKeySpec = new DESKeySpec(bytesKey);//实例化DESKey秘钥的相关内容
        SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");//实例一个秘钥工厂,指定加密方式
        Key convertSecretKey = factory.generateSecret(desKeySpec);
        return convertSecretKey;
    }
    /**
     * 加密
     * @param convertSecretKey
     * @param date
     * @return
     * @throws GeneralSecurityException
     */
    public static String encodeString(Key convertSecretKey, String data) throws GeneralSecurityException {
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");//通过Cipher这个类进行加解密相关操作
        cipher.init(Cipher.ENCRYPT_MODE, convertSecretKey);
        byte[] enData = Base64.getEncoder().encode(data.getBytes());
        byte[] result = cipher.doFinal(enData);//输入要加密的内容
        System.out.println("加密的结果:" + Hex.encodeHexString(result));
        return Hex.encodeHexString(result);

    }

    /**
     * 解密
     * @param convertSecretKey
     * @param date
     * @return
     * @throws GeneralSecurityException
     * @throws DecoderException
     */
    public static String decodeString(Key convertSecretKey, String data) throws GeneralSecurityException, DecoderException {
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");//通过Cipher这个类进行加解密相关操作
        cipher.init(Cipher.DECRYPT_MODE, convertSecretKey);
        byte[] hdata = Hex.decodeHex(data.toCharArray());
        byte[] result = cipher.doFinal(hdata);
        byte[] decode = Base64.getDecoder().decode(result);
        System.out.println("解密结果:" + new String(decode));
        return new String(decode);
    }

}

原文地址:https://www.cnblogs.com/sun-flower1314/p/11940331.html

时间: 2024-11-10 20:06:18

Java数据的简单加密 DES方式的相关文章

OC的DES加密,使与java的Cipher类用DES/CBC/PKCS5Padding方式的加密结果相同

问题说明: 最近用到DES加密,并且要与java的Cipher类加密的结果保持一致.没研究过java的Cliper,但工作中Cipher根据DES/CBC/PKCS5Padding加密方式生成了一个字符串.比较后发现,此字符串与将OC加密生成的NSData直接用字符串格式化([NSString stringWithFormat:@"%@",data])相同.所以就先这么用了. 代码如下: #import "CommonCrypto/CommonCryptor.h"

OC的DES加密,使与java的Cipher类用DES/CBC/PKCS5Padding方式的加密结果同样

问题说明: 近期用到DES加密,而且要与java的Cipher类加密的结果保持一致.没研究过java的Cliper,但工作中Cipher依据DES/CBC/PKCS5Padding加密方式生成了一个字符串. 比較后发现,此字符串与将OC加密生成的NSData直接用字符串格式化([NSString stringWithFormat:@"%@",data])同样.所以就先这么用了. 代码例如以下: #import "CommonCrypto/CommonCryptor.h&quo

Java开发经验分享之JAVA简单实现DES加密与实现DES解密

前言:相信很多小伙伴在开发过程中都会加密问题.当然,小菜在开发中也遇到了,这里呢,小菜想说的是JAVA简单实现DES加密. 今天就简单实现一下如何DES加密解密.话不多说,代码如下.直接可用.希望能成为你项目中的一个很好的工具类. public class DesEncrypt { // DES加密密钥key public static String key = "sdfDA12r3JHV214IJrwerDSO892BK2345nrekk35oewr4wrwrenlklknsdlemifzkw

关于 Des加密(Android与ios 与后台java服务器之间的加密解密)

关于 Des加密(Android与ios  与后台java服务器之间的加密解密) http://blog.sina.com.cn/s/blog_7c8dc2d50101id91.html (2013-04-17 11:47:23)   分类: iPhone开发 最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,登录的密码要用DES加密,服务器是用Java开发的,客户端要同时支持多平台(Android.iOS),在处理iOS的DES加密的时候遇到了一些问题,起初怎么调都调不

制作URL以GET方式提交的简单加密程序

首先我们用到的是 DESCryptoServiceProvider 类 对此微软给出的解释是 定义访问数据加密标准 (DES) 算法的加密服务提供程序 (CSP) 版本的包装对象.无法继承此类. 接下来是接受参数页面的方法: using System; using System.Collections.Generic; using System.IO; using System.Security.Cryptography; using System.Text; using System.Web;

数据库数据在Java占用内存简单估算

数据库数据在Java占用内存简单估算 结论: 1.数据库记录放在JAVA里,用对象(ORM一般的处理方式)须要4倍左右的内存空间.用HashMap这样的KV保存须要10倍空间; 2.假设你主要数据是text大文本,那空间一般能够按2倍估算. 以上是一个通用数据測试结论.估大家參考. 数据库记录占用的空间大小比較好算,比方一个int占用4字节.bigint占用8字节.date占用3字节,datetime占用8字节,varchar是变长字节等.假设不想精确计算,在数据库中通过统计信息也能够比較轻松的

java 简单加密

* 所有的加密技术的基本操作都是用encrypt()和decrypt()方法对消息 * 进行分解和组合,其中消息是用空格分隔的字符串,除了encrypt()和decrypt() * 外每个加密类还需要encode()和decode()方法对每一个单词按照特定的算法 * 规则进行编码,.例如Caesar Cipher 和 Transpose Clipher * 按照设想由于加密都有相同的方法,因此首先定义一个通用的类Cipher类 * 封装公用的方法. package Case.Encryptio

java中最简单的计算执行时长的方式

日常在做一些性能测试的时候会通过执行时间来判断执行时长,java中最简单的方式如下: //开始时间 long startL= new Date().getTime(); //这里需要导入 java.util.*;包 exceFun(); long endL= new Date().getTime(); //执行时间 System.out.println("startL:"+senStrat +" endL:"+senEndL +" 执行时长:"

【Java】分享一个使用DES加密和解密的算法

[Java]分享一个使用DES加密和解密的算法 分享一个使用DES加密和解密的算法,当前这个算法已经应用到项目中: package com.util; import java.net.URLDecoder; import java.net.URLEncoder; import java.security.Key; import java.security.spec.AlgorithmParameterSpec; import javax.crypto.Cipher; import javax.c