zoukankan      html  css  js  c++  java
  • 3des加解密

    package com.ct.test3des;
    
    import java.io.ByteArrayOutputStream;
    
    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Test3DES triDEs = new Test3DES();
            String str="dada1234567=";
            String bytes=triDEs.encode(str);
            System.out.println("bytes:"+bytes);
            byte[] keyBytes=triDEs.encode(str).getBytes();
            System.out.println(">>"+keyBytes.length);
            String szSrc = "This is a 3DES test.";
            System.out.println("加密前的字符串:" + szSrc);
            byte[] encoded = triDEs.encryptMode(keyBytes, szSrc.getBytes());
            System.out.println("加密后的字符串:" + new String(encoded));
            byte[] srcBytes = triDEs.decryptMode(keyBytes, encoded);
            System.out.println("解密后的字符串:" + new String(srcBytes));
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
        
        class Test3DES  {
            private static final String Algorithm = "DESede";
            private static final String hexString="0123456789ABCDEF";
            
            public byte[] encryptMode(byte[] keybyte, byte[] src) {
                try {
                // 根据给定的字节数组和算法构造一个密钥
                SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
                // 加密
                Cipher c1 = Cipher.getInstance(Algorithm);
                c1.init(Cipher.ENCRYPT_MODE, deskey);
                return c1.doFinal(src);
                } catch (java.security.NoSuchAlgorithmException e1) {
                e1.printStackTrace();
                } catch (javax.crypto.NoSuchPaddingException e2) {
                e2.printStackTrace();
                } catch (java.lang.Exception e3) {
                e3.printStackTrace();
                }
                return null;
                }
            
            public byte[] decryptMode(byte[] keybyte, byte[] src) {
                try {
                // 生成密钥
                SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
                // 解密
                Cipher c1 = Cipher.getInstance(Algorithm);
                c1.init(Cipher.DECRYPT_MODE, deskey);
                return c1.doFinal(src);
                } catch (java.security.NoSuchAlgorithmException e1) {
                e1.printStackTrace();
                } catch (javax.crypto.NoSuchPaddingException e2) {
                e2.printStackTrace();
                } catch (java.lang.Exception e3) {
                e3.printStackTrace();
                }
                return null;
                }
            
            public  String encode(String str) 
            { 
            //根据默认编码获取字节数组 
            byte[] bytes=str.getBytes(); 
            StringBuilder sb=new StringBuilder(bytes.length*2); 
    
            //将字节数组中每个字节拆解成2位16进制整数 
            for(int i=0;i<bytes.length;i++) 
            { 
            sb.append(hexString.charAt((bytes[i]&0xf0)>>4)); 
            sb.append(hexString.charAt((bytes[i]&0x0f)>>0)); 
            } 
            return sb.toString(); 
            }
            
            public  String decode(String bytes) 
            { 
            ByteArrayOutputStream baos=new ByteArrayOutputStream(bytes.length()/2); 
            //将每2位16进制整数组装成一个字节 
            for(int i=0;i<bytes.length();i+=2) 
            baos.write((hexString.indexOf(bytes.charAt(i))<<4 |hexString.indexOf(bytes.charAt(i+1)))); 
            return new String(baos.toByteArray()); 
            } 
    
            public  String byte2hex(byte[] b) {
            String hs = "";
            String stmp = "";
            for (int n = 0; n < b.length; n++) {
            stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
            if (stmp.length() == 1)
            hs = hs + "0" + stmp;
            else
            hs = hs + stmp;
            if (n < b.length - 1)
            hs = hs + ":";
            }
            return hs.toUpperCase();
            }
            
            
            
            
            
        }
    
    }
  • 相关阅读:
    zz:android sharedpreferences用法
    Android viewHolder
    Python学习笔记~
    zz:Java多线程编程总结
    zz:Android 2.1 源码结构
    onSaveInstanceState的用法
    zz:如何学习Linux操作系统
    Python学习笔记II
    Python类型转换
    zz:Android应用程序基础
  • 原文地址:https://www.cnblogs.com/ct732003684/p/2957606.html
Copyright © 2011-2022 走看看