java明文密碼三重加密方法
本文介紹了兩種密碼加密的方法,這兩種很常見(jiàn)可以再百度隨意找到。
1.摩斯密碼;
說(shuō)道密碼加密不得不提的方法。很是經(jīng)典。
首先說(shuō)一下他的對(duì)照表,直接上圖。




核心思想就是替換明文密碼,將字符對(duì)應(yīng)的替換成-與.兩種符號(hào)的組合;
2、柵欄密碼;
所謂柵欄密碼,就是把要加密的明文分成N個(gè)一組,然后把每組的第1個(gè)字連起來(lái),形成一段無(wú)規(guī)律的話(huà)。 不過(guò)柵欄密碼本身有一個(gè)潛規(guī)則,就是組成柵欄的字母一般不會(huì)太多。(一般不超過(guò)30個(gè),也就是一、兩句話(huà))
這個(gè)沒(méi)有什么好說(shuō)的了,舉個(gè)栗子:對(duì)明文ASDFGHJKL進(jìn)行加密;分成兩組:基數(shù)位置一組,偶數(shù)位置一組。然后兩組合并成ADGJLSFHK;
我對(duì)這兩種加密方式進(jìn)行了結(jié)合,對(duì)一個(gè)明文密碼進(jìn)行了三重加密:第一層?xùn)艡谝淮危诙釉贃艡谝淮?,第三層再一次摩斯加密?/span>
先是柵欄部分:
/*柵欄解密解密類(lèi)*/
public class Fence {
/*加密部分*/
public String encryption (String password){
String p = new String();
String p1 = new String();
String p2 = new String();
for (int i = 0; i < password.length(); i++){
if(i%2 == 0)
p1 += p.valueOf(password.charAt(i));
else
p2 += p.valueOf(password.charAt(i));
}
return p1+p2;
}
/*解密部分*/
public String decode(String FencePassword){
String password = new String();
String p = new String();
String p1 = FencePassword.substring(0, FencePassword.length()/2);
String p2 = FencePassword.substring(FencePassword.length()/2);
int i;
for (i = 0; i < p1.length(); i++){
password += p.valueOf(p1.charAt(i)) + p.valueOf(p2.charAt(i));
}
if(FencePassword.length()%2 != 0)
password += p.valueOf(p2.charAt(i));
return password;
}
}
然后是摩斯部分:
這一部分比較繁瑣,在于摩斯密碼與符號(hào)之間的匹配問(wèn)題上,想著用一個(gè)數(shù)組去存儲(chǔ),然后循環(huán)進(jìn)行匹配;但是我是一個(gè)不怕麻煩只求簡(jiǎn)單的一個(gè)人,就進(jìn)行了一個(gè)個(gè)的比較;
然后在摩斯加密解密的時(shí)候進(jìn)行了兩次的柵欄加密解密;這樣用到加密解密的時(shí)候只要調(diào)用摩斯類(lèi)的加密解密函數(shù)即可。
/*摩斯加密解密類(lèi)*/
import java.util.StringTokenizer;
public class Morse {
/*摩斯密碼與字符之間的匹配常量*/
final String A = ".-";
final String B = "---.";
final String C = "-.-.";
final String D = "-..";
final String E = ".";
final String F = "..-.";
final String G = "--.";
final String H = "....";
final String I = "..";
final String J = ".---";
final String K = "-.-";
final String L = ".-..";
final String M = "--";
final String N = "-.";
final String O = "---";
final String P = ".--.";
final String Q = "--.-";
final String R = ".-.";
final String S = "...";
final String T = "-";
final String U = "..-";
final String V = "...-";
final String W = ".--";
final String X = "-..-";
final String Y = "-.--";
final String Z = "--..";
final String $0 = "-----";
final String $1 = ".----";
final String $2 = "..---";
final String $3 = "...--";
final String $4 = "....-";
final String $5 = ".....";
final String $6 = "-....";
final String $7 = "--...";
final String $8 = "---..";
final String $9 = "----.";
final String period = ".-.-.-"; // .
final String colon = "---..."; // :
final String comma = "--..--"; // ,
final String semicolon = "-.-.-."; // ;
final String question = "..--.."; // ?
final String equal = "-...-"; // =
final String doubleQuotation = ".-..-.";// "
final String singleQuotation = ".----.";// '
final String slash = "-..-."; ///
final String exclamation = "-.-.--"; // !
final String hyphen = "-....-"; // -
final String underscore = "..--.-"; // _
final String lroundBrackets = "-.--."; // (
final String rroundBrackets = "-.--.-"; // )
final String $ = "...-..-"; // $
final String ampersand = ".-..."; // &
final String at = ".--.-."; // @
final String plus = ".-.-."; // +
/*加密對(duì)應(yīng)的匹配*/
public String matching(String str) {
switch (str) {
case "A":
return A;
case "B":
return B;
case "C":
return C;
case "D":
return D;
case "E":
return E;
case "F":
return F;
case "G":
return G;
case "H":
return H;
case "I":
return I;
case "J":
return J;
case "K":
return K;
case "L":
return L;
case "M":
return M;
case "N":
return N;
case "O":
return O;
case "P":
return P;
case "Q":
return Q;
case "R":
return R;
case "S":
return S;
case "T":
return T;
case "U":
return U;
case "V":
return V;
case "W":
return W;
case "X":
return X;
case "Y":
return Y;
case "Z":
return Z;
case "0":
return $0;
case "1":
return $1;
case "2":
return $2;
case "3":
return $3;
case "4":
return $4;
case "5":
return $5;
case "6":
return $6;
case "7":
return $7;
case "8":
return $8;
case "9":
return $9;
case ".":
return period;
case ":":
return colon;
case ",":
return comma;
case ";":
return semicolon;
case "?":
return question;
case "=":
return equal;
case "\"":
return doubleQuotation;
case "\'":
return singleQuotation;
case "/":
return slash;
case "!":
return exclamation;
case "-":
return hyphen;
case "_":
return underscore;
case "(":
return lroundBrackets;
case ")":
return rroundBrackets;
case "$":
return $;
case "&":
return ampersand;
case "@":
return at;
case "+":
return plus;
}
return " ";
}
/*摩斯加密*/
public String encryption(String password) {
Fence f = new Fence();
password = f.encryption(password);
password = f.encryption(password);
String MorsePasswork = new String();
String mp = new String();
for (int i = 0; i < password.length(); i++) {
mp = mp.valueOf(password.charAt(i));
MorsePasswork += matching(mp) + "/";
}
return MorsePasswork;
}
/*解密對(duì)應(yīng)換的匹配*/
public String matching2(String str) {
if (str.equals(A))
return "A";
else if (str.equals(B))
return "B";
else if (str.equals(C))
return "C";
else if (str.equals(D))
return "D";
else if (str.equals(E))
return "E";
else if (str.equals(F))
return "F";
else if (str.equals(G))
return "G";
else if (str.equals(H))
return "H";
else if (str.equals(I))
return "I";
else if (str.equals(J))
return "J";
else if (str.equals(K))
return "K";
else if (str.equals(L))
return "L";
else if (str.equals(M))
return "M";
else if (str.equals(N))
return "N";
else if (str.equals(O))
return "O";
else if (str.equals(P))
return "P";
else if (str.equals(Q))
return "Q";
else if (str.equals(R))
return "R";
else if (str.equals(S))
return "S";
else if (str.equals(T))
return "T";
else if (str.equals(U))
return "U";
else if (str.equals(V))
return "V";
else if (str.equals(W))
return "W";
else if (str.equals(X))
return "X";
else if (str.equals(Y))
return "Y";
else if (str.equals(Z))
return "Z";
else if (str.equals($0))
return "0";
else if (str.equals($1))
return "1";
else if (str.equals($2))
return "2";
else if (str.equals($3))
return "3";
else if (str.equals($4))
return "4";
else if (str.equals($5))
return "5";
else if (str.equals($6))
return "6";
else if (str.equals($7))
return "7";
else if (str.equals($8))
return "8";
else if (str.equals($9))
return "9";
else if (str.equals(period))
return ".";
else if (str.equals(colon))
return ":";
else if (str.equals(comma))
return ",";
else if (str.equals(semicolon))
return ";";
else if (str.equals(question))
return "?";
else if (str.equals(equal))
return "=";
else if (str.equals(doubleQuotation))
return "\"";
else if (str.equals(singleQuotation))
return "\'";
else if (str.equals(slash))
return "/";
else if (str.equals(exclamation))
return "!";
else if (str.equals(hyphen))
return "-";
else if (str.equals(underscore))
return "_";
else if (str.equals(lroundBrackets))
return "(";
else if (str.equals(rroundBrackets))
return ")";
else if (str.equals($))
return "$";
else if (str.equals(ampersand))
return "&";
else if (str.equals(at))
return "@";
else if (str.equals(plus))
return "+";
else
return " ";
}
/*摩斯解密*/
public String decode(String MorsePassword) {
String password = new String();
Fence f = new Fence();
StringTokenizer p = new StringTokenizer(MorsePassword, "/");
while (p.hasMoreElements()) {
password += matching2(p.nextToken());
}
password = f.decode(password);
password = f.decode(password);
return password;
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java查詢(xún)MongoDB數(shù)據(jù)庫(kù)案例大全
這篇文章主要給大家介紹了關(guān)于Java查詢(xún)MongoDB數(shù)據(jù)庫(kù)的一些相關(guān)案例,Java可以使用MongoDB的官方Java驅(qū)動(dòng)程序來(lái)連接和操作MongoDB數(shù)據(jù)庫(kù),需要的朋友可以參考下2023-07-07
Spring打包jar包時(shí)jsp頁(yè)面無(wú)法訪問(wèn)問(wèn)題解決
這篇文章主要介紹了Spring打包jar包時(shí)jsp頁(yè)面無(wú)法訪問(wèn)問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
java設(shè)計(jì)模式-單例模式實(shí)現(xiàn)方法詳解
單例模式,屬于創(chuàng)建類(lèi)型的一種常用的軟件設(shè)計(jì)模式。通過(guò)單例模式的方法創(chuàng)建的類(lèi)在當(dāng)前進(jìn)程中只有一個(gè)實(shí)例(根據(jù)需要,也有可能一個(gè)線程中屬于單例2021-07-07
Spring Boot 2.0.0 終于正式發(fā)布-重大修訂版本
北京時(shí)間 2018 年 3 月 1 日早上,如約發(fā)布的 Spring Boot 2.0 在同步至 Maven 倉(cāng)庫(kù)時(shí)出現(xiàn)問(wèn)題,導(dǎo)致在 GitHub 上發(fā)布的 v2.0.0.RELEASE 被撤回2018-03-03
AndroidQ沙盒機(jī)制之分區(qū)存儲(chǔ)適配
這篇文章主要介紹了AndroidQ沙盒機(jī)制之分區(qū)存儲(chǔ)適配,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06

