[android]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。然后和密文做运算,交换什么什么位置。

public class MainActivity extends Activity implements OnClickListener {

	private EditText des_key, des_src, des_dst;
	private Button btn_encode, btn_decode;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		des_key = (EditText) findViewById(R.id.des_key);
		des_src = (EditText) findViewById(R.id.des_src);
		des_dst = (EditText) findViewById(R.id.des_dst);
		btn_encode = (Button) findViewById(R.id.btn_encode);
		btn_decode = (Button) findViewById(R.id.btn_decode);
		btn_encode.setOnClickListener(this);
		btn_decode.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		String key_str = des_key.getText().toString();
		if (!TextUtils.isEmpty(key_str)) {
			try {
				// DES无论长了短了。都变成八位
				// AES 长度变为128 new SecretKeySpec(temp, "Aes");
				// 3Des 长度变为24 new SecretKeySpec(temp, "Desced");
				byte temp[] = new byte[8];
				byte b[] = key_str.getBytes("UTF-8");
				System.arraycopy(b, 0, temp, 0, Math.min(b.length, temp.length));
				// Des仅仅支持八位
				SecretKey des_key = new SecretKeySpec(temp, "Des");
				Cipher cipher = Cipher.getInstance("Des");
				switch (v.getId()) {
				case R.id.btn_encode:
					String src_str = des_src.getText().toString();
					if (!TextUtils.isEmpty(src_str)) {
						cipher.init(Cipher.ENCRYPT_MODE, des_key);
						byte[] bytes = cipher
								.doFinal(src_str.getBytes("UTF-8"));
						// 是用Base64编码的二进制字节数组
						des_dst.setText(Base64.encodeToString(bytes,
								Base64.DEFAULT));
					}
					break;

				case R.id.btn_decode:
					String dst_str = des_dst.getText().toString();
					if (!TextUtils.isEmpty(dst_str)) {
						cipher.init(Cipher.DECRYPT_MODE, des_key);
						// 是用Base64编码的二进制字节数组
						byte[] bytes = cipher.doFinal(Base64.decode(dst_str,
								Base64.DEFAULT));
						des_src.setText(new String(bytes, "UTF-8"));
					}
					break;
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

布局:

<span style="font-size:18px;"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/des_key"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="秘钥" />

    <EditText
        android:id="@+id/des_src"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="原文" />

    <EditText
        android:id="@+id/des_dst"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="密文" />

    <Button
        android:id="@+id/btn_encode"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="加密" />

    <Button
        android:id="@+id/btn_decode"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="解密" />

</LinearLayout></span>

时间: 2024-08-11 05:35:19

[android]DES/3DES/AES加密方式的相关文章

Java利用 DES / 3DES / AES 这三种算法分别实现 对称加密

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/54017759 有两句话是这么说的: 1)算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了. 2)编程就是算法和数据结构,算法和数据结构是编程的灵魂. 注意,这可不是我说的,是无数程序员总结的,话说的很实在也很精辟,若想长久可持续发展,多研究算法还是很有必要的,今天我给大家说说加密算法中的对称加密算法,并且这里将教会大家对称加密算法的编程使用.包含

AES加密方式

项目中也经常使用加密方式,Base64加密,AES加密,下面记录下使用AES加密方式 package com.czb; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Encoder; public class Test { public static void main(String[] args) t

Android数据加密之Aes加密

前言: 项目中除了登陆,支付等接口采用rsa非对称加密,之外的采用aes对称加密,今天我们来认识一下aes加密. 什么是aes加密? 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用. 接下来我们来实际看下具体怎么实现: 对于AesUtils类常量简介: private final static String HE

java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4

概述 信息安全基本概念: DES(Data Encryption Standard,数据加密标准) 3DES(Triple DES,三重数据加密算法(TDEA,Triple Data Encryption Algorithm)) AES(Advanced Encryption Standard,高级加密标准) Blowfish RC2 RC4 DES DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定

android base64 和 aes 加密 解密

package pioneerbarcode.ccw.com.encryptanddecode; import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.text.TextUtils;import android.util.Base64;import android.view.View;import android.widget.Button;import android.wi

iOS DES,AES加密

最近在准备面试,发现之前项目中用到的加密技术都记得不清楚了,所以总结一下.之前项目用到的加密技术一种是DES加密,用来加密发送请求的字段,保证服务器数据的安全,一种是AES加密,用于加密登录时发送的账号密码数据. 一 . DES加密 DES加密属于对称加密算法,即信息的发送者与接受者在进行信息的传输与处理上使用的同一秘钥. 直接上代码,新建DESEncry文件,.h文件中: #import <Foundation/Foundation.h> @interface DESEncry : NSOb

iOS,Android,Jave后台AES加密解密

AES256 在iOS和Android上的相关代码: http://www.tuicool.com/articles/RVFbmmU 里面可以下载相关的代码. 我们遇到的问题是: 把Android的代码移动到Java 后台出现无法加密. 遇到如下的2个问题 1. no cipher getinstance support for AES/CBC/PKCS7Padding 解决方案: http://www.codeweblog.com/java-%E4%BD%BF%E7%94%A8aes-cbc-

Android加密算法之AES加密和解密实现

<pre name="code" class="plain"><span style="font-family:Microsoft YaHei;font-size:18px;">前面写了常用了MD5加密算法,一个肯定不能满足本屌丝的胃口,最近发现AES加密算法貌似挺牛逼的样子,还是是美国联邦政府采用的一种区块高级加密标准,一看到"高级"就把我吓尿了,果然牛逼,废话少说,先学会用再说.</span&

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

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