1. 程式人生 > >java使用AES加密解密 AES-128-ECB加密

java使用AES加密解密 AES-128-ECB加密

http://www.cnblogs.com/chen-lhx/p/5817161.html

***************************************************

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;
/**
 *
 * @author Administrator
 *
 */
public class AES {

    // 加密
    public static String Encrypt(String sSrc, String sKey) throws Exception {
        if (sKey == null) {
            System.out.print("Key為空null");
            return null;
        }
        // 判斷Key是否為16位
        if (sKey.length() != 16) {
            System.out.print("Key長度不是16位");
            return null;
        }
        byte[] raw = sKey.getBytes("utf-8");
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"演算法/模式/補碼方式"
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
        byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));

        return new Base64().encodeToString(encrypted);//此處使用BASE64做轉碼功能,同時能起到2次加密的作用。
    }

    // 解密
    public static String Decrypt(String sSrc, String sKey) throws Exception {
        try {
            // 判斷Key是否正確
            if (sKey == null) {
                System.out.print("Key為空null");
                return null;
            }
            // 判斷Key是否為16位
            if (sKey.length() != 16) {
                System.out.print("Key長度不是16位");
                return null;
            }
            byte[] raw = sKey.getBytes("utf-8");
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            byte[] encrypted1 = new Base64().decode(sSrc);//先用base64解密
            try {
                byte[] original = cipher.doFinal(encrypted1);
                String originalString = new String(original,"utf-8");
                return originalString;
            } catch (Exception e) {
                System.out.println(e.toString());
                return null;
            }
        } catch (Exception ex) {
            System.out.println(ex.toString());
            return null;
        }
    }

    public static void main(String[] args) throws Exception {
        /*
         * 此處使用AES-128-ECB加密模式,key需要為16位。
         */
        String cKey = "1234567890123456";
        // 需要加密的字串
        String cSrc = "www.gowhere.so";
        System.out.println(cSrc);
        // 加密
        String enString = AES.Encrypt(cSrc, cKey);
        System.out.println("加密後的字串是:" + enString);

        // 解密
        String DeString = AES.Decrypt(enString, cKey);
        System.out.println("解密後的字串是:" + DeString);
    }
}

//原始碼片段來自雲程式碼http://yuncode.net
            

android
package cd.server.data;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

import android.annotation.SuppressLint;
import android.util.Base64;

// http://blog.csdn.net/hbcui1984/article/details/5201247
// AES加密解密工具類 
public class AES128
{
	private static final String UTF_8 = "UTF-8";

	/** 
     * 加密 
     * @param content 需要加密的內容 
     * @param password  加密密碼 
     * @return 
     */  
    @SuppressLint ("TrulyRandom")
	public static String encrypt(String key, String src)
	{
		try
		{
			if(key == null || key.length() <= 0 || src == null || src.length() <= 0) return null;
			
			SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
			Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
			byte[] byteContent = src.getBytes(UTF_8);
			cipher.init(Cipher.ENCRYPT_MODE, skey);// 初始化
			byte[] result = cipher.doFinal(byteContent);
			return byte2Base64(result); // 加密
		}
		catch (Exception ext)
		{
			ext.printStackTrace();
		}
		return null;
	}
    private static  String byte2Base64(byte[] encode)
	{
		try
		{
			return Base64.encodeToString(encode, Base64.NO_WRAP);

		}
		catch (Exception ext)
		{
			ext.printStackTrace();
		}

		return null;
	}
}


相關推薦

java使用AES加密解密 AES-128-ECB加密

http://www.cnblogs.com/chen-lhx/p/5817161.html *************************************************** import javax.crypto.Cipher; import jav

java.. C# 使用AES加密互解 采用AES-128-ECB加密模式

convert odi summary for number als name apache base java需要下載外部包, commons codec.jar 1.6 較新的JAVA版本把Base64的方法改成靜態方法,可能會寫成Base64.encodeToStr

AES-128 ECB 加密有感

最近要搞一個加密。很是蛋疼。 原本微控制器和上位機發送資料就是非常簡單的。 這個專案相當複雜。每次資料命令都差不多1K,一次資料都要1K以上。是通過GPRS傳送的。 這些難纏的問題再前一階段已經解決了。 現在老師,還讓我們做AES加密。是對我們做控制的人來說還確實有點難度啊 。 寫的詳單詳細。 我再囉嗦一

微信AES-128-CBC加密解密

brush sha 解密 method pre tcl int cipher ++ [TestClass] public class UnitTest1 { [TestMethod] public void TestMeth

java AES 128加密解密演算法

最近在做app後臺的伺服器,使用到AES加密解密演算法,無奈網上的都不符合要求,於是自己借鑑著寫了一個AES加密解密工具。 金鑰長度問題 預設 Java 中僅支援 128 位金鑰,當使用 256 位金鑰的時候,會報告金鑰長度錯誤 Invalid AES

nodejs中aes-128-cbc加密解密

和java程式進行互動的時候,java那邊使用AES 128位填充模式:AES/CBC/PKCS5Padding加密方法,在nodejs中採用對應的aes-128-cbc加密方法就能對應上,因為有使用向量(iv),所以nodejs中要用createCiphe

java加密解密技術(3)對稱加密AES

import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; imp

[小程式碼]在Android和PHP之間的加密/解密,AES加密

Android和PHP上的加、解密字串。 android上使用: mcrypt = new MCrypt(); /* 加密*/ String encrypted = MCrypt.bytesToHex( mcrypt.encrypt("需加密的字元") ); /* 解密*

Java對稱與非對稱加密解密,AES與RSA

加密技術可以分為對稱與非對稱兩種. 對稱加密,解密,即加密與解密用的是同一把祕鑰,常用的對稱加密技術有DES,AES等 而非對稱技術,加密與解密用的是不同的祕鑰,常用的非對稱加密技術有RSA等 為什麼要有非對稱加密,解密技術呢 假設這樣一種場景A要傳送一段訊息給B,但是又

java加密解密AES實現

加密時,先用AES加密,再用base64加密;解密時,先用base64解密,再用AES解密。 import org.apache.commons.io.FileUtils; import sun.misc.BASE64Decoder; import sun.misc.BAS

PHP和Java AES 128 ECB解密(PKCS5Padding)

php 和 java 使用 AES128/ECB/PKCS5Padding對稱加解密,簽名使用 HmacSHA256,附帶 php 和 java 程式碼,均為 DEMO 版本,測試通過,實際使用請根據自己專案修改。 最近做專案涉及到一丟丟的安全問題,需

微信小程式開放資料解密 AES-128-CBC 解密(Java版本)

最近朋友在弄微信小程式開發,需要跟微信服務端互動,微信敏感資料都有加密返回,需要在服務端接收進行解密後再返回給客戶端小程式,今天就通過Java進行資料的解密,以下展示是Java程式碼如果你使用的C#,請訪問這個地址(C#版本) https://blog.csdn.net/jasonso

微信小程式開放資料解密 AES-128-CBC 解密(C#版本)

最近朋友在弄微信小程式開發,需要跟微信服務端互動,微信敏感資料都有加密返回,需要在服務端接收進行解密後再返回給客戶端小程式,今天就通過C# 進行資料的解密,以下展示是C# 程式碼如果你使用的Java,請訪問這個地址(Java版本) https://blog.csdn

java aes128位 cfb與gcm加解密 aes-128-cfb aes-128-gcm

Base64.encodeBase64String(secretKey.getEncoded())是apache的commons-codec庫,二進位制經base64編碼為字串 //cfb package com.dddd.codec; import org.apache.comm

Elixis 加密AES MD5等加密

Elixis 是一個C#的加密啊庫,支援 AES、TripleDES和MD5 演算法的加密和解密(MD5是單向的),而且更多加密的演算法還在進一步開發中。 示例程式碼: private static

JAVA加密解密之凱撒加密(Caesar cipher)演算法

凱撒加密演算法簡介 凱撒加密(Caesar cipher)是一種簡單的訊息編碼方式:它根據字母表將訊息中的每個字母移動常量位k。舉個例子如果k等於3,則在編碼後的訊息中,每個字母都會向前移動3位:a會被替換為d;b會被替換成e;依此類推。字母表末尾將回捲到字母

加密解密流程和各加密演算法的選擇、用途

加密演算法的分類: 雙向加密:分為對稱加密和非對稱加密。 對稱加密 採用單鑰密碼系統的加密方法,同一個金鑰可以同時用作資訊的加密和解密,這種加密方法稱為對稱加密,也稱為單金鑰加密。  需要對加密

Java加密解密之非對稱加密

非對稱加密演算法需要兩個金鑰來進行加密和解密,這兩個祕鑰是公開金鑰(public key,簡稱公鑰)和私有金鑰(private key,簡稱私鑰)。使用公鑰加密的,要使用私鑰解密。反之,使用私鑰加密的,要使用公鑰解密。 和對稱加密的區別是: 對稱加密:加密和解密時使用的是

openssl框架閒談--EVP加密/解密介面(附:加密)

openssl 框架中的另一個重頭戲就是EVP介面,它提供了所有的加密和解密實現,不但封裝了已有的著名演算法,而且其簡單易用的介面可以讓你自己輕鬆實現一個演算法,這 就增強了它的可擴充套件性,基本上,openssl只是提供了機制框架,策略由使用者實現。EVP介面的重要資料結構

aes加密解密,含 128、192、256位,cbc、cfb、ecb、ofb、pcbc模式

AES加解密總共有以下這些 演算法/模式/填充 位元組加密後資料長度 不滿16位元組加密後長度 AES/CBC/NoPadding 16