DES、3DES、AES加密方式

DES 支持8位加密解密,3Des支持24位,Aes支持32位。3Des是Des算法做三次。位数的单位是字节byte,不是bits。

3Des是把24位分成3组,第一组八位用来加密,第二组8位用于解密,第三组8位用于加密,所以,如果秘钥为123456781234567812345678(3组1-8),则相当于做了一次12345678的Des加密。例如:第一次用12345678秘钥对123进行加密得到 "LDiFUdf0iew=",然后用第二组的12345678对其进行解密(逆向加密过程),得到了123,第三次又一次加密得到 "LDiFUdf0iew="。

三种加密方式代码里不同的地方:

byte temp[] = new byte[位数];

SecretKey des_key = new SecretKeySpec(temp, "加密算法");

加密算法名对应的是:Aes Des Desede

改了这两个地方就可以实现不同加密方式。加密方式底层不一样,DES是把原文编程2进制的一串01,然后和密文做运算,交换什么什么位置。

[java] view plaincopyprint?

  1. public class MainActivity extends Activity implements OnClickListener {  
  2.   
  3.     private EditText des_key, des_src, des_dst;  
  4.     private Button btn_encode, btn_decode;  
  5.   
  6.     @Override  
  7.     protected void onCreate(Bundle savedInstanceState) {  
  8.         super.onCreate(savedInstanceState);  
  9.         setContentView(R.layout.activity_main);  
  10.         des_key = (EditText) findViewById(R.id.des_key);  
  11.         des_src = (EditText) findViewById(R.id.des_src);  
  12.         des_dst = (EditText) findViewById(R.id.des_dst);  
  13.         btn_encode = (Button) findViewById(R.id.btn_encode);  
  14.         btn_decode = (Button) findViewById(R.id.btn_decode);  
  15.         btn_encode.setOnClickListener(this);  
  16.         btn_decode.setOnClickListener(this);  
  17.     }  
  18.   
  19.     @Override  
  20.     public void onClick(View v) {  
  21.         String key_str = des_key.getText().toString();  
  22.         if (!TextUtils.isEmpty(key_str)) {  
  23.             try {  
  24.                 // DES不管长了短了,都变成八位  
  25.                 // AES 长度变为128 new SecretKeySpec(temp, "Aes");  
  26.                 // 3Des 长度变为24 new SecretKeySpec(temp, "Desced");  
  27.                 byte temp[] = new byte[8];  
  28.                 byte b[] = key_str.getBytes("UTF-8");  
  29.                 System.arraycopy(b, 0, temp, 0, Math.min(b.length, temp.length));  
  30.                 // Des只支持八位  
  31.                 SecretKey des_key = new SecretKeySpec(temp, "Des");  
  32.                 Cipher cipher = Cipher.getInstance("Des");  
  33.                 switch (v.getId()) {  
  34.                 case R.id.btn_encode:  
  35.                     String src_str = des_src.getText().toString();  
  36.                     if (!TextUtils.isEmpty(src_str)) {  
  37.                         cipher.init(Cipher.ENCRYPT_MODE, des_key);  
  38.                         byte[] bytes = cipher  
  39.                                 .doFinal(src_str.getBytes("UTF-8"));  
  40.                         // 是用Base64编码的二进制字节数组  
  41.                         des_dst.setText(Base64.encodeToString(bytes,  
  42.                                 Base64.DEFAULT));  
  43.                     }  
  44.                     break;  
  45.   
  46.                 case R.id.btn_decode:  
  47.                     String dst_str = des_dst.getText().toString();  
  48.                     if (!TextUtils.isEmpty(dst_str)) {  
  49.                         cipher.init(Cipher.DECRYPT_MODE, des_key);  
  50.                         // 是用Base64编码的二进制字节数组  
  51.                         byte[] bytes = cipher.doFinal(Base64.decode(dst_str,  
  52.                                 Base64.DEFAULT));  
  53.                         des_src.setText(new String(bytes, "UTF-8"));  
  54.                     }  
  55.                     break;  
  56.                 }  
  57.             } catch (Exception e) {  
  58.                 e.printStackTrace();  
  59.             }  
  60.         }  
  61.     }  
  62. }  

布局:

[java] view plaincopyprint?

  1. <span style="font-size:18px;"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <EditText  
  8.         android:id="@+id/des_key"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:hint="秘钥" />  
  12.   
  13.     <EditText  
  14.         android:id="@+id/des_src"  
  15.         android:layout_width="wrap_content"  
  16.         android:layout_height="wrap_content"  
  17.         android:hint="原文" />  
  18.   
  19.     <EditText  
  20.         android:id="@+id/des_dst"  
  21.         android:layout_width="wrap_content"  
  22.         android:layout_height="wrap_content"  
  23.         android:hint="密文" />  
  24.   
  25.     <Button  
  26.         android:id="@+id/btn_encode"  
  27.         android:layout_width="wrap_content"  
  28.         android:layout_height="wrap_content"  
  29.         android:text="加密" />  
  30.   
  31.     <Button  
  32.         android:id="@+id/btn_decode"  
  33.         android:layout_width="wrap_content"  
  34.         android:layout_height="wrap_content"  
  35.         android:text="解密" />  
  36.   
  37. </LinearLayout></span>  

特别说明:尊重作者的劳动成果,转载请注明出处哦~~~http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt165

时间: 2024-10-15 23:07:56

DES、3DES、AES加密方式的相关文章

两种JavaScript的AES加密方式(可与Java相互加解密)_javascript技巧

由于JavaScript属于弱类型脚本语言,因此当其与强类型的后台语言进行数据交互时会产生各种问题,特别是加解密的操作.本人由于工作中遇到用js与Java进行相互加解密的问题,在网上查了很多资料及代码段,均无法解决.后总结多篇文档内容终于找到解决办法,现记录与此: 下面给大家介绍两种JavaScript的AES加密方式,具体详情如下所示: 第一种:加解密时需要秘钥(key)和秘钥偏移量(iv)的情况,在线验证地址:http://www.seacha.com/tools/aes.html //该方

无线路由器的三种加密方式

  无线路由器主要提供了三种无线安全类型:WPA-PSK/WPA2-PSK.WPA/WPA2 以及WEP.不同的安全类型下,安全设置项不同. 1. WPA-PSK/WPA2-PSK WPA-PSK/WPA2-PSK安全类型其实是WPA/WPA2的一种简化版本,它是基于共享密钥的WPA模式,安全性很高,设置也比较简单,适合普通家庭用户和小型企业使用.其具体设置项见下图所示: 认证类型: 该项用来选择系统采用的安全模式,即自动.WPA-PSK.WPA2-PSK. 自动:若选择该项,路由器会根据主机请

Php AES加密、解密与Java互操作的问题

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送)国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为"中国PE第一股",市值超1000亿元.  -------------------------------------------------------------------------

C# MD5 加密解密 DES RC2 3DES AES等软创加密类

C# 各种加密方法封装类,软创加密类,内含MD5加密解密.DES法解密加密.RC2加密解密.3DES加密解密,还有AES加解密等,使用时用到哪一种加密方法,可把代码单独摘录出来,本类比较综合,代码中包括注释,完整代码: view sourceprint?001using System; 002using System.Collections.Generic; 003using System.Text; 004using System.IO; 005using System.Security.Cr

加密-求问有什么安全性比较高的加解密算法? des, 3des这种用的很多了吧应该

问题描述 求问有什么安全性比较高的加解密算法? des, 3des这种用的很多了吧应该 求问有什么安全性比较高的加解密算法? des, 3des这种用的很多了吧应该 解决方案 加密算法的强度不是取决于算法是否公开,而是取决于算法本身在数学上是否有解,以及密钥的强度. 所以aes这种工业级的加密算法,在相当的时间和应用范围内肯定是没有问题的. 解决方案二: 对称加密算法 对称加密算法用来对敏感数据等信息进行加密,常用的算法包括: DES(Data Encryption Standard):数据加密

使用openssl库实现des,3des加密

原文地址:http://blog.chinaunix.net/uid-25943311-id-3020013.html 整理转载自:http://blog.csdn.net/xuplus/article/details/2607254主要是调整了一下格式,以及一些变量的类型,以解决在VC2008下无法编译通过的问题. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <opens

C# 加密解密(DES,3DES,MD5,Base64) 类

原文:C# 加密解密(DES,3DES,MD5,Base64) 类 保存! public sealed class EncryptUtils { #region Base64加密解密 /// <summary> /// Base64加密 /// </summary> /// <param name="input">需要加密的字符串</param> /// <returns></returns> public sta

加密算法比较3DES AES RSA ECC MD5 SHA1等

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

Android数据加密之Aes加密_Android

前言: 项目中除了登陆,支付等接口采用rsa非对称加密,之外的采用aes对称加密,今天我们来认识一下aes加密.  其他几种加密方式:  •Android数据加密之Rsa加密  •Android数据加密之Aes加密  •Android数据加密之Des加密  •Android数据加密之MD5加密  •Android数据加密之Base64编码算法  •Android数据加密之SHA安全散列算法  什么是aes加密?       高级加密标准(英语:Advanced Encryption Standa