踩过的坑—DES加密解密

Android常用加解密算法 数据安全,不管是对于企业还是个人都是十分重要。而作为一个移动开发者,我们更需要去考虑数据传输的安全性,去保护企业及个人信息安全。在Java,Android语言中,有许多的常用加解密算法,例如:对称加密算法AES,DES,3DES,非对称加密算法RSA,经典哈希算法MD5,SHA. 对称加密算法:加密秘钥和解密秘钥相同 例:AES,DES,3DES 非对称加密算法:有公钥和秘钥,公钥加密 阅读详情
    最近公司项目里面要对接口进行加密,服务端选用了DES来加密,作为小Android,只有去学习一些DES的基本用法,这不看不知道,有好几个大坑。


    坑一:我们公司所用的框架是OKHTTP+retrofit+Rxjava,那么问题来了,我最开始是在okhttp返回的数据的时候来解密,但是获取到的死活为空

(服务端肯定没问题,因为IOS都解密成功了),然后各种百度,各种问人,后来我们公司一个Android的大神告诉我,okhttp好像是封装了解析器,在拿到数据得时候就解析过一次了,这就尴尬了,好吧,这个没办法了,只有自己重新写数据请求从服务端获取数据了(这个办法只适合少数接口,如果全部解密的话,个人建议写一个拦截器,再自己写一个数据解析器,我们公司只有几个接口,就没那个必要了)。

    坑二:用了nohttp来把数据拿到了,拿到数据的时候,好高兴哦,一串很长的乱码,但是解密的时候出了问题,拿到的数据在网上DES在线解析能解

开,没毛病,但是拿到解密的代码里面,握了个草,解不开了,然后各种
试,最开始我以为是代码里面数据长度超过限制了,然后又是各种百度,
各种问人,然后那天加班搞,反正服务端不承认有问题(毕竟大牛嘛),
最后数据一遍一遍的取,一遍一遍的解析,对照,后来发现了一个很大的问题,

***DES在加密解密的时候会约定好,采用什么加密模式,采用什么填充,
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance(“DES/ECB/NoPadding”);
*原来是后台加密后,没给我说是什么填充。所以肯定解不开了,又是一个大坑。
还有一点,就是百度到的很多加密解密会用到一个Base64的类,而且还会手动给你写一个Base64类,这完全没必要的,因为Android自带了一个Base64类,直接用就行:android.util.Base64,代码如下:
byte[] byteMi = android.util.Base64.decode(data,0);

最后贴下代码哈,百度很多的:

这是加密的,传入你要加密的字符串,第二个参数是设置密码,调用这个方法会返回一个加密后的一串奇奇怪怪的东西

public static String encryptDES(String encryptString, String encryptKey) throws Exception {

    SecretKeySpec key = new SecretKeySpec(encryptKey.getBytes(), "DES");
    Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
    cipher.init(Cipher.ENCRYPT_MODE, key);
    byte[] encryptedData = cipher.doFinal(encryptString.getBytes());
    return Base64.encode(encryptedData);
}
这是解密的,传入你要解密的那一串奇怪的东西,输入密码,就会返回正常的字符串:

  public static String decryptDES(String decryptString, String decryptKey) throws Exception {

    byte[] byteMi =  android.util.Base64.decode(decryptString,0);
    SecretKeySpec key = new SecretKeySpec(decryptKey.getBytes(), "DES");
    Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
    cipher.init(Cipher.DECRYPT_MODE, key);
    byte decryptedData[] = cipher.doFinal(byteMi);
    return new String(decryptedData);
}

其实如果密码固定的话,还可以这样写,只需要调用的时候传入数据源就行了,一样的效果

private static final String DES_KEY="密码";

 public static String decrypt(String data) throws Exception {
    byte[] byteMi =  android.util.Base64.decode(data,0);
    // DES算法要求有一个可信任的随机数源
    SecureRandom sr = new SecureRandom();
    // 从原始密匙数据创建一个DESKeySpec对象
    DESKeySpec dks = new DESKeySpec(DES_KEY.getBytes());
    // 创建一个密匙工厂,然后用它把DESKeySpec对象转换成
    // 一个SecretKey对象
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES_ALGORITHM);
    SecretKey securekey = keyFactory.generateSecret(dks);
    // Cipher对象实际完成解密操作
    Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
    // 用密匙初始化Cipher对象
    cipher.init(Cipher.DECRYPT_MODE, securekey);
    // 现在,获取数据并解密
    // 正式执行解密操作
    return new String(cipher.doFinal(byteMi));
}
方法调用的时候就简单了撒:

String d=DES.decrypt(response.get().toString());

直接简单粗暴,返回的string  就想怎么玩就怎么玩咯。
C++实现DES加密解密 DES实验要求 实验目的 实现电子本模式(ECB)和密码分组链接模式(CBC)的DES算法。 实验要求 指定明文文件、密钥文件、初始化向量文件的位置和名称,加密的操作模式以及加密完成后密文文件的位置和名称。 加密时先分别从指定的明文文件、密钥文件和初始化向量文件中读取有关信息,然后按ECB和CBC操作模式分别进行加密,最后将密文(用16进制表示)写入指定的密文文件。解密类似。 统一将文件名命名如... 阅读详情

相关推荐

DES 加密解密

江科大信息安全作业 DES 加密解密编译环境 DEV 5.6 【VS 编译不通过 需要改动】输入输出第1行:输入8字符待加密明文。第2行:输入8字符密钥。第3行:输出 结果。第四行:输入解密密钥。(与加密密钥相同 才能正确解密)第五行:输入解密答案。代码#include <stdlib.h> #include <stdio.h> // 对明文执行IP置换得到L0,R0 (L...

王会长的博客 2080

Java 加密处理很慢问题

Java使用加密对象后很慢 一个加密的小问题Cipher.getInstance Q:Cipher.getInstance(“RSA”, new org.bouncycastle.jce.provider.BouncyCastleProvider()) 很慢 A. 并没有解决。看网络方法是jdk1.8.0_40\jre\lib\security\java.security 下securerandom.source=file:/dev/urandom 配置问题,实际改了没效果 个人认为还是考虑业务上做缓存,没

u012528091的博客 2043

C#常用加密解密方法(DES加密解密)

本节主要分享DES加密解密:DES,全称Data Encryption Standard,是一种对称加密算法。由于其安全性比较高(有限时间内,没有一种加密方法可以说是100%安全),很可能是最广泛的密钥系统(我们公司也在用,估计你们也有在用....),唯一一种方法可以破解该算法,那就是穷举法。DES(Data Encryption Standard)和TripleDES是对称加密的两种实现。DES和TripleDES基本算法一致,只是TripleDES算法提供的key位数更多,加密可靠性更高。

MarcoPro的博客 9151

Android数据加密之Rsa/MD5/Aes/Des加密算法归纳总结

加密算法 1.加密算法通常分为对称性加密算法和非对称性加密算法:对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行 加解密了。非对称算法与之不同,发送双方A,B事先均生成一堆密匙,然后A将自己的公有密匙发送给B,B将自己的公有密匙发送给A,如果A要给B发送消息,则先需要用B的公有密匙进行消息加密,然后发送给B端,此时B端再用自己的私有密匙进行消息解密...

心情舒畅 3025

DES 加密解密算法的C++实现

网络与信息安全 Introduction to Network and Security   ——DES 加密解密算法的C++实现                 姓 名:                        学 号:                        学 院:                              2010年10月

小王的博客 4935

openssl des 加密解密

最近在整理关于数据加密解密的资料,整合C/C++、.NET、JAVA三个平台的数据加解密资料,使得三个平台调用相关函数加解密得到的结果都是一致的,兼容的。 ps:最后整理的资料可能会以电子版pdf的形式发出来,如果对您有益,请关注一下。 C/C++是直接使用openssl库的crypte模块进行数据加解密的,下面介绍一下openssl/crypt调用DES进行加解密的过程。代码很容易理

天剑 4889

DES 加密解密实现之旅

本文将记录从某次渗透实战登录遇到的des加密,分析 des.js 和 login.jsp 文件到成功实现加密解密功能的全过程。通过这一过程,不仅深入理解了 DES 加密算法的实现细节,还成功地在 Node.js 环境中实现了与 des.js 一致的加密解密功能。分析了 des.js 中的关键函数,包括 strEnc、strDec、enc、dec 等,详细解释了 DES 算法的实现细节,如初始置换多轮 Feistel 结构S 盒置换等。通过这些分析,不仅理解了算法的原理,还掌握了其在实际渗透测试中的实现方法。

2401_83799022的博客 948

Android中使用DES算法进行文件加密解密编程

本篇文章将详细介绍如何在Android中使用DES算法进行文件加密解密,并提供相应的源代码。通过导入相关的类和库,并编写相应的加密和解密方法,我们可以轻松地实现文件的加密和解密功能。请注意,为了保证安全性,你应该妥善保管加密密钥,并避免将其硬编码在代码中。该方法与加密方法类似,同样创建输入流和输出流,并根据提供的密钥生成一个。方法,可以将指定的文件进行加密,并将加密后的文件保存到指定的位置。方法,可以对加密的文件进行解密,并将解密后的文件保存到指定的位置。表示加密后的文件输出路径,表示待加密的文件路径,

2301_79331328的博客 556

大数据安全 | 【实验】DES加密解密

DES (Data Encryption Standard)是一种使用56位密钥对64位长分组进行加密的密码,是一种迭代算法。DES算法是属于对称密码算法中的分组加密算法,是第一个公开的分组加密算法。

知识库搭建ing 6503

Java中DES加密解密的实践指南

在Java的加密体系中,Cipher类是进行加密和解密操作的核心工具类。它提供了一种标准方式,用于执行加密或解密操作,不涉及数据的具体加密算法细节。Java Cryptography Architecture (JCA) 提供了一系列算法,而Cipher类能够让你以一种可移植的方式使用这些算法。Cipher类中一些关键的方法包括:: 此方法用于获取Cipher对象的实例。参数algorithm指定了要使用的加密算法名称。: 此方法用于初始化Cipher对象。

weixin_28999139的博客 653

使用JavaScript实现DES加密解密教程

在信息安全领域,对称加密技术一直扮演着至关重要的角色。DES(Data Encryption Standard),即数据加密标准,是一种经典的对称加密算法,它由IBM公司在上世纪70年代初期提出,并很快在1977年被美国政府采纳为官方的加密标准。对称加密意味着在加密和解密过程中使用相同的密钥,这一点使得DES成为了信息安全历史上具有里程碑意义的技术。由于DES算法简单、高效且易于硬件实现,它被广泛应用于各种需要机密保护的通信和存储数据的场景中。

weixin_42581003的博客 1397

基于Java DES与3DES加密解密

DES/3DES属于对称加密算法。3des即用DES进行三重加密。 下面分别用Java代码实现DES加密解密与3DES加密解密,如有错误请指正,谢谢! DES加密解密: /** * DES加密 * @param datasource,加密数据 * @param password,密钥 * @return */ public static byte[] encrypt(byte[...

sh879682的博客 3702

探索DES加密解密工具的实战运用

数据加密标准(DES)是一种曾经广泛使用的对称密钥加密算法,旨在为用户提供一种高效的加密手段来保护敏感数据。DES将64位的明文输入进行加密,输出64位的密文,且其安全性在1970年代得到了业界的认可。然而,随着计算技术的发展,尤其是硬件能力的飞速进步,DES的安全性逐渐受到威胁。本章将引导读者了解DES的基本概念,探讨它的工作原理以及它在整个加密领域的地位,为后续章节深入分析其局限性和与现代加密算法的对比打下基础。对称加密原理。

weixin_28872035的博客 1130

DES 加密解密算法 python 版

前言: 工作需求:所有参数(数据库连接,服务器连接,都不能使用明文传参),所以需要一个加密解密算法,本来是想写 AES 的,但是 python 环境下各种改东西调试,好烦,所以退而求其次用 DES; DES 算法写了 java 版和 python 版,这个是 python 版,java 版可以在我的博客里找一下。java版 1.直接上代码 #!/usr/bin/python # -*- codin...

清泉影月 4895

Android数据加密之Des加密

前言:  有个同事咨询我有关Android DES加密的相关实现,简单的实现了一下,今天来总结一下。  其他几种加密方式:  •Android数据加密之Rsa加密  •Android数据加密之Aes加密  •Android数据加密之Des加密  •Android数据加密之MD5加密  •Android数据加密之Base64编码算法  •Android数据加密之SHA安全散列算法  DES加密介绍:       DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究, 后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为D

两轮差速小车循线控制原理分析

硬件资料设定:小车驱动来自于两个相同的电机,转向依靠两轮差速实现,小车前后左右安装超声波传感器,前后各一个,左右各两个; 功能目标:假设小车左侧有墙壁,通过超声波测距实现按指定距离沿墙行驶 参数设定:车轮半径r=3cm,车轮间距wd=10cm,车身长length=16cm,侧边超声波传感器前后各一个,假设一个在车头一个在车尾,间距=车身=length=16cm,小车线速度恒定v = 0.2m/s,距离墙d=10cm,假设超声波传感器以10Hz的频率采集距离。 在以上条件下,设定小车出发点,方向与墙平行

aibingjin的博客 1万+

Python DES加密解密方法 pyDes库 兼容中文

单纯记录一下Python中DES加密解密的使用方式直接看代码: 依赖pyDes库安装>pip install pyDes 约定秘钥 python和java 加密和解密联调,兼容中文字符串 Python代码段 #!/usr/bin/env python # -*- coding: utf-8 -*- # encoding:utf-8 # @Author : Benjamin # @Time : 2020/7/15 15:47 from pyDes import des,...

Benjamin 优快云博客 7307

Docker一键部署NextCloud+OnlyOffice:打造企业级私有云办公环境(含HTTPS配置)

本文详细介绍了如何使用Docker Compose一键部署NextCloud与OnlyOffice,构建安全、高效的企业级私有云办公平台。内容涵盖从架构设计、Docker编排配置、HTTPS证书自动化管理,到系统初始化、性能优化及高级功能扩展的全栈实战指南,帮助企业实现数据自主可控与高效的在线文档编辑协作。

Apple的专栏 1238

Java使用Hutool实现AES、DES加密解密

为什么80%的码农都做不了架构师?>>> ...

weixin_34026484的博客 4989

codevs 1620 轮船问题 DP 解题报告

某国家被一条河划分为南北两部分,在南岸和北岸总共有N对城市,每一城市在对岸都有唯一的友好城市,任何两个城市都没有相同的友好城市。

Hawo11的博客 815

CloudCompare 二次开发(6)——插件中拖拽添加Qt窗口(区域生长算法为例)

手动拖拽的方式搭建Qt对话框界面的制作流程,以PCL中的点云区域生长算法为例进行制作。

点云侠的博客 2151

在JSP中实现DES加密解密的例子

  在JSP中实现DES加密解密的例子实例下载:点击下载DES.javapackage Lion.Security.Cryptography;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.NoSuchPaddingException;import javax.cry

LionSky.Net 6156

hive get_json_object解析json结果为null咋办?

最近一位开发的同学在使用get_json_object函数对json数据解析的时候,出现了结果为null的问题,问题原因是sql语法导致的,那么今天就来详细介绍一下解析json函数的用法!最后还是提醒小伙伴们,在开发过程中,一定要注意sql语法格式的书写,避免一些意想不到的结果!

笑看风云路的博客 2308
下一篇: Android用OKHttp进行数据请求时,统一给所有接口添加某个请求参数
江雪丶
博客等级 码龄9年 7粉丝 5原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值