java 加密解密時間戳
今天獻上一個將時間戳加密成一個21位大寫英文字母串的java程式碼,並附上解密程式碼,思路很簡單,僅供娛樂
private Map<Character, String> codeMap;
private String englishChars;
private ArrayList<Integer> changeIndex;
public SimpleDateFormat sdf;
/**
* 加密時間
* @author huzhen
* @since 2017/7/12
* @param date date()型別時間
* */
public String enTimeCode(Date enDate){
String dataStr = null;
try{
dataStr = this.getSdf().format(enDate);
String enStr = "";
for(int i=0; i<dataStr.length(); i++){
String transLetter = this.getCodeMap().get(dataStr.charAt(i));
enStr = enStr + transLetter;
}
int changeCusor = 0;
StringBuffer retStr = new StringBuffer(generateRandString(21));
for(int i=0; i<retStr.length(); i++){
if(this.getChangeIndex().contains(i)){
retStr.setCharAt(i, enStr.charAt(changeCusor));
changeCusor++;
}
}
return retStr.toString();
}catch(Exception e){
//e.printStackTrace();
System.out.println(e.getMessage());
return "";
}
}
/**
* 將加密後的亂碼解密
* @author huzhen
* @since 2017/7/12
* @param date date()型別時間
* */
public Date deTimeCode(String enStr){
String dateStr = "";
try{
String toDecodeStr = "";
for(int i=0; i<enStr.length(); i++){
if(this.getChangeIndex().contains(i)){
toDecodeStr = toDecodeStr + enStr.charAt(i);
}
}
for(int i=0; i<toDecodeStr.length(); i++){
char deChar = valueGetKey(this.getCodeMap(), String.valueOf(toDecodeStr.charAt(i))).get(0);
if(deChar != '\0'){
dateStr += deChar;
}
}
return this.getSdf().parse(dateStr);
}catch(Exception e){
//e.printStackTrace();
System.out.println(enStr + "不符合規則!");
return null;
}
}
private Map<Character, String> getCodeMap() {
if(codeMap == null){
codeMap = new HashMap<Character, String>();
codeMap.put('0', "I");
codeMap.put('1', "L");
codeMap.put('2', "O");
codeMap.put('3', "V");
codeMap.put('4', "E");
codeMap.put('5', "M");
codeMap.put('6', "Y");
codeMap.put('7', "D");
codeMap.put('8', "N");
codeMap.put('9', "S");
}
return codeMap;
}
private static ArrayList<Character> valueGetKey(Map<Character, String> map, String value) {
Set<Entry<Character, String>> set = map.entrySet();
ArrayList<Character> arr = new ArrayList<Character>();
Iterator<Entry<Character, String>> it = set.iterator();
while(it.hasNext()) {
Map.Entry<Character, String> entry = (Map.Entry<Character, String>)it.next();
if(entry.getValue().equals(value)) {
char s = (char)entry.getKey();
arr.add(s);
}
}
return arr;
}
private String getEnglishChars() {
if(englishChars == null){
englishChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
}
return englishChars;
}
private SimpleDateFormat getSdf() {
if(sdf == null){
sdf = new SimpleDateFormat("yyyyMMdd");
}
return sdf;
}
public ArrayList<Integer> getChangeIndex() {
if(changeIndex == null){
changeIndex = new ArrayList<Integer>();
changeIndex.add(1);
changeIndex.add(6);
changeIndex.add(9);
changeIndex.add(13);
changeIndex.add(14);
changeIndex.add(17);
changeIndex.add(19);
changeIndex.add(20);
}
return changeIndex;
}
/**
* 隨機生成指定位數的大寫英文字母串
* @author huzhen
* @since 2017/7/12
* @param
* */
private String generateRandString(int bits){
String retStr = "";
for(int i=0; i<bits; i++){
retStr = retStr + this.getEnglishChars().charAt((int)(Math.random() * 26));
}
return retStr;
}
相關推薦
java 加密解密時間戳
今天獻上一個將時間戳加密成一個21位大寫英文字母串的java程式碼,並附上解密程式碼,思路很簡單,僅供娛樂 private Map<Character, String> codeMap; private String englishChars;
password學4——Java 加密解密之消息摘要算法(MD5 SHA MAC)
加密解密 hash函數 -s -m hmac 可能 正向 技術發展 哈希算法 Java 加密解密之消息摘要算法(MD5 SHA MAC) 消息摘要 消息摘要(Message Digest)又稱為數字摘要(Digital Digest)。它是一個唯一相
java加密解密
子郵件 openssl sock 天數 file 驗證 word genrsa https 一:1.KeyManagerFactory類(密鑰管理工廠,用來管理密鑰): 構建密鑰庫管理工廠與下例一樣: System.setProperty("javax.net.ssl.k
【小家java】Java中對時間戳相加減的問題(向前推100天,答案卻讓我匪夷所思)
相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9
Unix時間戳和Java中的時間戳的區別
前言 最近在使用阿里的日誌服務時,遇到了一些Java中Timestamp的坑,所以特意做了瞭解並整理了一下。在這之前首先得介紹一下Unix時間戳: Unix時間戳是從1970年1月1日(UTC
java加密解密技術(3)對稱加密AES
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; imp
JAVA JDK1.8 時間戳與時間格式化 實用工具類
這是為了個人的方便,也同時為了大家能更好地瞭解與使用獲取時間的各種方法。 不 廢 話, 上 代 碼 : import org.springframework.util.Assert; import java.time.Cloc
JAVA加密解密之凱撒加密(Caesar cipher)演算法
凱撒加密演算法簡介 凱撒加密(Caesar cipher)是一種簡單的訊息編碼方式:它根據字母表將訊息中的每個字母移動常量位k。舉個例子如果k等於3,則在編碼後的訊息中,每個字母都會向前移動3位:a會被替換為d;b會被替換成e;依此類推。字母表末尾將回捲到字母
Java 加密解密工具類AESUtil
package test; /* @auther wjh @date 2018-08-01*/ import java.security.SecureRandom; import javax.crypto.Cipher; import javax.cry
Java加密解密之數字簽名
上一篇帖子,我們講了MAC(訊息認證碼),它可以驗證身份和防篡改。 它的機制是通過通訊雙方都持有相同的祕鑰去實現,祕鑰相同摘要才相同,沒有祕鑰就不能生成正確的摘要資訊。 但是,它有個缺點,就是通訊雙方必須持有相同的祕鑰,解決方法就是使用數字簽名 數字簽名(又稱公鑰數字簽名、
Java加密解密之對稱加密
採用單鑰密碼系統的加密方法,同一個金鑰可以同時用作資訊的加密和解密,這種加密方法稱為對稱加密,也稱為單金鑰加密。 其核心思想是,加密和解密都是同一個祕鑰 對稱加密常用的演算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJAC
Java和php時間戳轉換問題
總結一下Java 時間戳和PHP時間戳 的轉換問題: 由於精度不同,導致長度不一致,直接轉換錯誤。 JAVA時間戳長度是13位,如:1294890876859 PHP時間戳長度是10位, 如:1294890859 主要最後三位的不同,JAVA時間戳在PHP中使用,去掉後三位,如:129489087
Java 加密解密工具
package com.panda.core.db.util; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import
Java加密解密之MAC(訊息認證碼)
上一篇帖子,我們講了訊息摘要(數字摘要),它是把一個文字/檔案 通過摘要函式(hash函式)計算出一個結果。然後把文字/檔案和摘要結果一同發給接受者 接受者接收到檔案之後,也進行摘要,把兩個摘要結果進行對比。如果一致就說明文字/檔案和摘要是一致的 但是,這裡有個問題,假設A
Java加密解密全解
1 sha加密: 安全雜湊演算法(Secure Hash Algorithm)主要適用於數字簽名標準(Digital Signature Standard DSS)裡面定義的數字簽名演算法(Digital Signature Algorithm DSA)。對於長度小於2^6
Java加密解密之非對稱加密
非對稱加密演算法需要兩個金鑰來進行加密和解密,這兩個祕鑰是公開金鑰(public key,簡稱公鑰)和私有金鑰(private key,簡稱私鑰)。使用公鑰加密的,要使用私鑰解密。反之,使用私鑰加密的,要使用公鑰解密。 和對稱加密的區別是: 對稱加密:加密和解密時使用的是
java獲取當前時間戳
轉自:https://www.cnblogs.com/zhujiabin/p/6168671.html?utm_source=itdadao&utm_medium=referral 獲取當前時間戳 //方法 一 System.currentTimeMilli
java加密解密和簽名的問題
注意:加密:先用公鑰加密再用私鑰解密 解密:先用私鑰解密再用公鑰解密 因為公鑰加密長度<127 私鑰》127 關於簽名: debug--除錯 release--釋出--正式簽名--android.keystore 應用升級:包名相同 簽名
java加密解密研究6、MD演算法家族
一、簡述 MD5演算法是典型的訊息摘要演算法,其前身有MD2、MD3和MD4演算法,它由MD4、MD3和MD2演算法改進而來。不論是哪一種MD演算法,它們都需要獲得一個隨機長度的資訊併產生一個123位的資訊摘要。如果將這個128位的二進位制摘要資訊換算成十六進位制,可以得到
JAVA加密解密之數字證書
系統之間在進行互動的時候,我們經常會用到數字證書,數字證書可以幫我們驗證身份等,下面我們就來看一下在java中如何使用數字證書。 我們先使用keytool工具生成金鑰庫並匯出公鑰證書。 第一步:生成keyStroe檔案 執行如下命令: keyto