DES--可逆加密演算法-密文可控
package main;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
public class CryptoUtil {
public static Key DEFAULT_KEY = null;
public static final String DEFAULT_ENCODE_RULES = CryptoUtil.class.getName();
public static final String DES = "DES";
public static void main(String[] args) {
String a = "20161021142843100001yagnpu123";
String key = DEFAULT_ENCODE_RULES + "yangpu1212";
System.out.println(a);
String strEnc = CryptoUtil.encode(key, a);// 加密字串,返回String的密文
System.out.println(strEnc);
String strDes = CryptoUtil.decode(key, strEnc);// 把String 型別的密文解密
System.out.println(strDes);
}
static {
DEFAULT_KEY = obtainKey(DEFAULT_ENCODE_RULES);
}
/**
* 獲得key
**/
public static Key obtainKey(String key) {
if (key == null) {
return DEFAULT_KEY;
}
KeyGenerator generator = null;
try {
generator = KeyGenerator.getInstance(DES);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
generator.init(new SecureRandom(key.getBytes()));
Key key1 = generator.generateKey();
generator = null;
return key1;
}
/**
* 加密<br>
* String明文輸入,String密文輸出
*/
public static String encode(String str) {
return encode(null, str);
}
/**
* 加密<br>
* String明文輸入,String密文輸出
*/
public static String encode(String key, String str) {
return byteToString(obtainEncode(key, str.getBytes()));
}
/**
* 解密<br>
* 以String密文輸入,String明文輸出
*/
public static String decode(String str) {
return decode(null, str);
}
/**
* 解密<br>
* 以String密文輸入,String明文輸出
*/
public static String decode(String key, String str) {
return new String(obtainDecode(key, stringToByte(str)));
}
/**
* 加密<br>
* 以byte[]明文輸入,byte[]密文輸出
*/
private static byte[] obtainEncode(String key, byte[] str) {
byte[] byteFina = null;
Cipher cipher;
try {
Key key1 = obtainKey(key);
cipher = Cipher.getInstance(DES);
cipher.init(Cipher.ENCRYPT_MODE, key1);
byteFina = cipher.doFinal(str);
} catch (Exception e) {
e.printStackTrace();
} finally {
cipher = null;
}
return byteFina;
}
/**
* 解密<br>
* 以byte[]密文輸入,以byte[]明文輸出
*/
private static byte[] obtainDecode(String key, byte[] str) {
Cipher cipher;
byte[] byteFina = null;
try {
Key key1 = obtainKey(key);
cipher = Cipher.getInstance(DES);
cipher.init(Cipher.DECRYPT_MODE, key1);
byteFina = cipher.doFinal(str);
} catch (Exception e) {
e.printStackTrace();
} finally {
cipher = null;
}
return byteFina;
}
/**
* 將byte轉換成string
*/
public static String byteToString(byte[] b) {
// 轉成16進位制字串
StringBuilder sb = new StringBuilder();
String stmp = "";
for (int n = 0; n < b.length; n++) {
// 整數轉成十六進位制表示
stmp = Integer.toHexString(b[n] & 0XFF);
if (stmp.length() == 1) {
sb.append("0" + stmp);
} else {
sb.append(stmp);
}
}
return sb.toString().toUpperCase(); // 轉成大寫
}
/**
* 將string轉換成byte
*/
public static byte[] stringToByte(String str) {
byte[] b = str.getBytes();
if ((b.length % 2) != 0)
throw new IllegalArgumentException(b + ":length is not even numbers");
byte[] b2 = new byte[b.length / 2];
for (int n = 0; n < b.length; n += 2) {
String item = new String(b, n, 2);
// 兩位一組,表示一個位元組,把這樣表示的16進位制字串,還原成一個進位制位元組
b2[n / 2] = (byte) Integer.parseInt(item, 16);
}
return b2;
}
}
相關推薦
DES--可逆加密演算法-密文可控
package main; import java.security.Key; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import
c# AES DES MD5加密演算法
MD5加密封裝 MD5常用加密FormsAuthentication.HashPasswordForStoringInConfigFile在Net Freamwork4.5以後就不在支援,下面整理了32位或16位下的幾個方法,以及不同寫法,最後一個由從老版本遷移過來,後續淘汰不用。 us
加密演算法學習總結---DES-CBC加密演算法
DES-CBC機密演算法 DES全稱為Data Encryption Standard,即資料加密標準,是一種使用金鑰加密的塊演算法,1977年被美國聯邦政府的國家標準局確定為聯邦資料處理標準(FIPS),並授權在非密級政府通訊中使用,隨後該演算法在國際
對稱加密 非對稱加密 不可逆加密演算法
根據金鑰型別不同可以將現代密碼技術分為兩類:對稱加密演算法(私鑰密碼體系)和非對稱加密演算法(公鑰密碼體系)。 1 對稱加密演算法中,資料加密和解密採用的都是同一個金鑰,因而其安全性依賴於所持有金鑰的安全性。 對稱加密演算法的主要優點是加密和解密速度快,加密強度高,且演算法公開. 缺點是實現金鑰的祕密分發困
Java DES 檔案加密演算法
DES類: public class DESEncrypt { /** 加密工具 */ private Cipher encryptCipher = null; /** 解密工具 */ private Cipher decryptCipher = null;
DES對稱加密演算法在(.NET Framework) C#中的使用
關於對稱加密演算法,這個不多作解釋,百度百科給出的說明如下:des對稱加密,對稱加密,是一種比較傳統的加密方式,其加密運算、解密運算使用的是同樣的金鑰,資訊的傳送者和資訊的接收者在進行資訊的傳輸與處理時,必須共同持有該密碼(稱為對稱密碼),是一種對稱加密演算法。簡而言之就是用
面向雲環境基於屬性加密的密文分享系統——簡介
1.Abstract 隨著網際網路技術的發展,人們需要處理和儲存的資訊資料量也越來越大。雲端計算的來臨,在滿足人們對海量資料儲存空間以及計算資源需求的同時,雲端儲存本身帶來的安全問題也不容忽視。資料的異地儲存、雲伺服器提供商的不可信、管理員能否對自身資料擁有足
java-可逆加密演算法
package main; import java.security.Key; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import j
JAVA 可逆加密演算法的簡單實現
很多加密包都提供複雜的加密演算法,比如MD5,這些演算法有的是不可逆的。 有時候我們需要可逆演算法,將敏感資料加密後放在資料庫或配置檔案中,在需要時再再還原。 這裡介紹一種非常簡單的java實現可逆加密演算法。 演算法使用一個預定義的種子(seed)來對加密內容進行異或執行
PHP可逆加密演算法
AES加密 加密 function zAES_encrypt($str, $privateKey = "1234567812345678", $iv = "1234567812345678") { $encrypted = mcryp
DES加密演算法(密文只有字串和數字)
因為最近在做一個系統,系統需要有個能展示一個數據頁面在大螢幕上,而這個頁面的資料是和每個使用者掛鉤的。但是要求又不能讓使用者看到URL地址上的使用者的個人ID。 之前用了BASE64的加密演算法,對ID進行加密,後來發現密文中有%的字元出現,偶爾會出現無法解密
java:三重des加密中明文、密文長度
對長度為7的位元組陣列加密,解密輸出結果: Java程式碼 原明文byte[]長度:7 相應的16進位制字串值:0123456789abcd 加密後byte[]長度:8 相應的16進位制字串值:19dffce951d8c37d 解密後byte[]長度:7 相應的16進位制字串
【IoT】加密與安全:非對稱加密演算法 RSA 1024 公鑰、祕鑰、明文和密文長度
RSA 1024 是指公鑰及私鑰分別是 1024bit,也就是 1024/8 = 128Bytes。 RSA 演算法金鑰長度的選擇是安全性和程式效能平衡的結果,金鑰長度越長,安全性越好,加密解密所需時間越長。 1、非對稱加密演算法中 1024bit 金鑰的強度相當於對稱加
MD5 不可逆加密,Des對稱可逆加密 ,RSA非對稱可逆加密 ,數字證書 SSL
md5算法 eric net 內容 href archive 9.png pre encrypt :MD5 不可逆加密2:Des對稱可逆加密3:RSA非對稱可逆加密4:數字證書 SSL Anker_張(博客園)http://www.cnb
加密演算法總結 加密演算法(DES,AES,RSA,MD5,SHA1,Base64)比較和專案應用
加密演算法(DES,AES,RSA,MD5,SHA1,Base64)比較和專案應用 加密技術通常分為兩大類:"對稱式"和"非對稱式"。 對稱性加密演算法:對稱式加密就是加密和解密使用同一個金鑰。資訊接收雙方都需事先知道密匙和加解密演算法且其密匙是相同的,之後便是對資料進行加解密了。對稱加密演算法用
DES加密演算法的java實現(基於java類庫)
嗯嗯........這個是我新開的部落格上的第一篇的文章,這裡小白希望自己的技術能夠一天比一天好(p≧w≦q),加油! 好吧,現在來一個基於java類庫的DES加密演算法的實現吧~網上不少的程式碼要不執行有問題,要不就是簡簡單單內建一個固定的加密字串就簡單完事了。好吧,我承認我現在是為懶人服務
國密GMSM2 —— go語言實現國密SM2加密演算法
package main import ( "github.com/tjfoc/gmsm/sm2" "fmt" "encoding/hex" ) func main() { //生成私鑰 privateKey, e := sm2.GenerateKey() if e!=n
加密演算法(DES,AES,RSA,MD5,SHA1,Base64)比較和專案應用, 各種加密演算法比較
加密演算法(DES,AES,RSA,MD5,SHA1,Base64)比較和專案應用 - sochishun - 部落格園 https://www.cnblogs.com/sochishun/p/7028056.html 加密演算法(DES,AES,RSA,MD
Des 加密演算法java工具類
package com.lock.demo.service; import org.apache.tomcat.util.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.SecretKey; import ja
爬蟲入門,模擬登入,動態token,攜帶cookie,密文加密,登入拉勾網,簡單爬蟲案例
import requests import re #匯入相應的庫檔案 headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64