查看原文:http://www.ibloger.net/article/19.html
(1)也许前段时间你看到过一则新闻,一名学生离校出走好几天,留下一段神奇密码。家长学生一起参与破解,最终找到孩子
(2)也许你看过战争片,有些战争中仍然使用电报传输,电视中的滴答声你是否还记的
(3)也许你看过《无间道》电影,卧底在车上敲打的那些神奇传输符号;http://v.youku.com/v_show/id_XMTY3MDc3MTg0.html
(4)也许你听说过这么一段爱情猜谜传奇。一男子向一女子表白,女子却给了一段摩斯密码,以及很少的提示,并表示,破译这个密码,才答应和他约会。男子死活不得求解,又在百度贴吧里将密码贴出以求助网友,最终密码亦被破解,如今也被学校翻拍成了微电影。http://v.youku.com/v_show/id_XMjMwNDYxNjQ0.html
(5)你是否想过使用2个按钮来控制整个键盘输入,如今Google研发的Gmail Tap 摩斯密码输入法已经成为现实
其实摩尔斯电码并不怎么难,只有简单的 2种 符号表示推荐一个短教学 http://v.youku.com/v_show/id_XNTEyNjczNTA0.html, 接下来一起了解学习
摩尔斯电码
摩尔斯电码手表
字符
|
电码符号
|
字符
|
电码符号
|
字符
|
电码符号
|
字符
|
电码符号
|
A
|
.━
|
B
|
━...
|
C
|
━ .━.
|
D
|
━ ..
|
E
|
.
|
F
|
..━.
|
G
|
━ ━.
|
H
|
....
|
I
|
..
|
J
|
.━ ━ ━
|
K
|
━ .━
|
L
|
.━..
|
M
|
━ ━
|
N
|
━.
|
O
|
━ ━ ━
|
P
|
.━ ━.
|
Q
|
━ ━.━
|
R
|
.━ .
|
S
|
...
|
T
|
━
|
U
|
..━
|
V
|
...━
|
W
|
.━ ━
|
X
|
━ ..━
|
Y
|
━.━ ━
|
Z
|
━ ━ ..
|
字符
|
电码符号
|
字符
|
电码符号
|
字符
|
电码符号
|
字符
|
电码符号
|
0
|
━ ━ ━ ━ ━
|
1
|
.━ ━ ━ ━
|
2
|
..━ ━ ━
|
3
|
...━ ━
|
4
|
....━
|
5
|
.....
|
6
|
━....
|
7
|
━ ━...
|
8
|
━ ━ ━ ..
|
9
|
━ ━ ━ ━ .
|
字符
|
电码符号
|
字符
|
电码符号
|
字符
|
电码符号
|
字符
|
电码符号
|
0
|
—
|
1
|
● —
|
2
|
● ● —
|
3
|
● ● ●— —
|
4
|
● ● ● ● —
|
5
|
● ● ● ● ●
|
6
|
— ● ● ● ●
|
7
|
— —● ● ●
|
8
|
— ● ●
|
9
|
— ●
|
字符
|
电码符号
|
字符
|
电码符号
|
字符
|
电码符号
|
字符
|
电码符号
|
.
|
.━.━ .━
|
:
|
━ ━ ━...
|
,
|
━ ━..━ ━
|
;
|
━.━ .━.
|
?
|
..━ ━..
|
=
|
━ ...━
|
'
|
.━ ━ ━ ━ .
|
/
|
━..━ .
|
!
|
━.━ .━ ━
|
━
|
━....━
|
_
|
..━ ━.━
|
"
|
.━ ..━.
|
(
|
━ .━ ━ .
|
)
|
━.━ ━.━
|
$
|
...━ ..━
|
&
|
....
|
@
|
.━ ━.━ .
|
+
|
.━.━.
|
package cryptology;
import java.util.HashMap;
import java.util.Map;
/**
* 摩尔斯对照表
* @author小奎
*/
public class ContrastList {
Map maplist = new HashMap();// 摩尔斯编码表集合
public ContrastList() {
maplist.put('A', "●-");
maplist.put('B', "-●●●");
maplist.put('C', "-●-●");
maplist.put('D', "-●●");
maplist.put('E', "●");
maplist.put('F', "●●-●");
maplist.put('G', "--●");
maplist.put('H', "●●●●");
maplist.put('I', "●●");
maplist.put('G', "●---");
maplist.put('K', "-●-");
maplist.put('L', "●-●●");
maplist.put('M', "--");
maplist.put('N', "-●");
maplist.put('O', "---");
maplist.put('P', "●--●");
maplist.put('Q', "--●-");
maplist.put('R', "●-●");
maplist.put('S', "●●●");
maplist.put('T', "-");
maplist.put('U', "●●-");
maplist.put('V', "●●●-");
maplist.put('W', "●--");
maplist.put('X', "-●●-");
maplist.put('Y', "-●--");
maplist.put('Z', "--●●");
/* 数字电码0-9 */
maplist.put('0', "-----");
maplist.put('1', "●----");
maplist.put('2', "●●---");
maplist.put('3', "●●●--");
maplist.put('4', "●●●●-");
maplist.put('5', "●●●●●");
maplist.put('6', "-●●●●");
maplist.put('7', "--●●●");
maplist.put('8', "---●●");
maplist.put('9', "----●");
/* 标点符号,可自增删 */
maplist.put(',', "--●●--"); // ,逗号
maplist.put('.', "●-●-●-"); // .句号
maplist.put('?', "●●--●●"); // ?问号
maplist.put('!', "-●-●--"); // !感叹号
maplist.put('\'', "●----●");// '单引号
maplist.put('\"', "●-●●-●");// "引号
maplist.put('=', "-●●●-"); // =等号
maplist.put(':', "---●●●"); // :冒号
maplist.put(';', "-●-●-●"); // ;分号
maplist.put('(', "-●--●"); // (前括号
maplist.put(')', "-●--●-"); // )后括号
maplist.put(' ', "★"); // 留空格,这里的星号是自定义的
}
}
package cryptology;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 摩斯密码测试
* @author 小奎
*/
public class Main {
char plaintext[]; // 明文
String ciphertext[]; // 密文
StringBuffer plainStr = new StringBuffer(" "); // 明文字符串
StringBuffer cipherStr = new StringBuffer(" "); // 密文字符串
// 实例化对照表对象
ContrastList C = new ContrastList();
Map maplist = C.maplist;
public static void main(String[] args) {
System.out.println("************ 欢迎使用摩尔斯电码程序 **************");
Main m = new Main();
m.init(); // 初始化
m.Encryption(); // 加密
m.Decryption(); // 解密
}
void init(){
System.out.println("请输入一段明文:");
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
while (true) {
// 正则验证 字母/数字/空格 , . ? + \ / : ; ! = ( )
Pattern p =Pattern.compile("^[\\s,\\w,\\.,\\?,\\+,:,;,!,',\",=,\\(,\\)]+$");
String str;
try {
str = bf.readLine();
Matcher m= p.matcher(str);
if(m.find()){
plaintext = str.toUpperCase().toCharArray(); // 将输入字符转换大写数组字符类型
break;
}
} catch (IOException e) {
}
System.out.println("未按规则输入..请重新输入..");
}
}
/**
* 加密
*/
void Encryption(){
for(int i=0; i s : maplist.entrySet()) {
if(tmp.equals(s.getValue())){
plainStr.append(s.getKey().toString().toLowerCase());
}
}
}
}
System.out.println("解密后:"+plainStr);
}
}