本文介绍了两种密码加密的方法,这两种很常见可以再百度随意找到。
1.摩斯密码;
说道密码加密不得不提的方法。很是经典。
首先说一下他的对照表,直接上图。
核心思想就是替换明文密码,将字符对应的替换成-与.两种符号的组合;
2、栅栏密码;
所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)
这个没有什么好说的了,举个栗子:对明文ASDFGHJKL进行加密;分成两组:基数位置一组,偶数位置一组。然后两组合并成ADGJLSFHK;
我对这两种加密方式进行了结合,对一个明文密码进行了三重加密:第一层栅栏一次,第二层再栅栏一次,第三层再一次摩斯加密;
先是栅栏部分:
/*栅栏解密解密类*/ 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; } }
然后是摩斯部分:
这一部分比较繁琐,在于摩斯密码与符号之间的匹配问题上,想着用一个数组去存储,然后循环进行匹配;但是我是一个不怕麻烦只求简单的一个人,就进行了一个个的比较;
然后在摩斯加密解密的时候进行了两次的栅栏加密解密;这样用到加密解密的时候只要调用摩斯类的加密解密函数即可。
/*摩斯加密解密类*/ 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 = ".-.-."; // + /*加密对应的匹配*/ 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; } /*解密对应换的匹配*/ 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; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
问题内容: 我正在尝试学习如何使用Java进行基于密码的加密。我在网上找到了几个示例,但在Stack Overflow上还没有(到目前为止)。这些示例对我的解释不大,尤其是在算法选择方面。似乎有很多传递字符串来说明要使用什么算法,但是很少有关于字符串来自何处以及含义的文档。而且似乎不同的算法可能需要KeySpec类的不同实现,所以我不确定哪种算法可以使用我正在查看的PBEKeySpec类。此外,所
问题内容: 我想用Java加密和解密密码,然后以加密形式存储到数据库中。如果它是开源的,那就太好了。有什么建议/建议吗? 问题答案: 编辑 :这个答案是旧的。现在 不建议 使用MD5,因为它很容易被破坏。 我想象中的MD5必须足够好?您可以使用MessageDigest实现它。 这里还列出了其他算法。 如果确实需要,这是它的第三方版本: Fast MD5
问题内容: 我正在尝试使用PHP mcrypt函数解密由Java Triple DES函数加密的密钥,但是没有运气。在下面找到Java代码 我想编写一个与上面的cryptoText Java函数等效的PHP函数。在生成由Java代码生成的用于加密的精确IV值时遇到困难,这是解密所必需的。 问题答案: 这等效于Java代码的PHP(我从The reference的注释中复制了PKCS#5-paddi
问题内容: 我有一个程序从配置文件中读取服务器信息,并希望对该配置中的密码进行加密,该密码可由我的程序读取并解密。 要求: 加密要存储在文件中的纯文本密码 解密从我的程序从文件读取的加密密码 关于我将如何做到这一点的任何建议?我当时在考虑编写自己的算法,但我认为这绝对是不安全的。 问题答案: 一种简单的方法是在Java中使用基于密码的加密。这使你可以使用密码来加密和解密文本。 这基本上意味着初始化
我想知道如果在创建用户或更改角色时没有指定ENCRYPTED,那么PostgreSQL使用的默认加密方法(如果有的话)是什么。 我在PostgreSQL网站上看到了以下内容: 密码存储加密默认情况下,数据库用户密码存储为MD5哈希,因此管理员无法确定分配给用户的实际密码。如果MD5加密用于客户端身份验证,则未加密的密码甚至不会暂时出现在服务器上,因为客户端MD5在通过网络发送之前对其进行加密。
问题内容: 我已经以加密格式将用户密码存储在数据库中。但是,现在,当用户想要登录并尝试输入其原始密码时,该代码始终会将输入的(原始)密码与数据库中存储的加密版本进行比较,从而导致登录失败。 请告诉我如何比较输入的(原始)密码和存储在数据库中的加密密码。 问题答案: 几乎可以肯定,您应该对密码进行 哈希处理 ,而不是使用可逆加密。您可能还需要 用盐 来做…在这种情况下,正确的步骤是: 查找最初对密码