원판 암호기
by Kim Ara
HTML
<h2>원판 암호기를 활용한 암호화</h2>
<p>키워드 : <input type="text" id="keyword"></p>
<p>평문 : <input type="text" id="plaintext"></p>
<p>암호문 : <input type="text" id="ciphertext"></p>
<input type="button" id="cipher" value="암호화">
<input type="button" id="decipher" value="복호화">
CSS
p { font-size: smaller; }
input { height: 20px; }
#plaintext,#ciphertext { width: 500px; }
JavaScript
window.onload = function() {
var enscriptor = Enscriptor();
// 평문을 암호화
document.getElementById("cipher").onclick = function() {
var keyword = document.getElementById("keyword").value;
var plaintext = document.getElementById("plaintext").value;
var ciphertext = document.getElementById("ciphertext");
ciphertext.value = enscriptor.encrypt(plaintext,keyword,true);
};
// 암호문을 복호화
document.getElementById("decipher").onclick = function() {
var keyword = document.getElementById("keyword").value;
var plaintext = document.getElementById("plaintext");
var ciphertext = document.getElementById("ciphertext").value;
plaintext.value = enscriptor.encrypt(ciphertext,keyword,false);
};
};
/*
* 함호기 객체를 생성하는 팩토리 함수
* obj.chars: 원판에서 사용할 문자 배열
* obj.nchars: 원판에서 사용하는 문자 배열의 길이 ( chars의 길이 )
* obj.numberOf(ch): 문자 ch가 배열 chars의 몇 번째 요소인지를 반환하는 메서드
* obj.shift(ch,n): 문자 ch를 n만큼 이동시켰을 때 가리키는 chars 배열의 요소
* obj.encrypt(text,keyword,encription): 원판 암호기로 암호화 / 복호화 하는 메서드
*/
function Enscriptor() {
var obj = {};
var N_ALPHABET = 26; // 알파벳 문자의 개수
var extraCharactors = [" ",".","?","!","%","#","'","&","$","@",":","/"];
// 특수문자 배열
obj.chars = [];
// chars 배열에 알파벳 소문자와 대문자를 추가
for(var c="a".charCodeAt(0); c<="z".charCodeAt(0); c++) {
obj.chars.push(String.fromCharCode(c));
}
for(var c="A".charCodeAt(0); c<="Z".charCodeAt(0); c++) {
obj.chars.push(String.fromCharCode(c));
}
// chars 배열에 숫자를 추가
for(var d=0; d<=9; d++) {
obj.chars.push(d.toString());
}
// chars 배열에 특수문자를 추가
for(var j=0; j<extraCharactors.length; j++) {
obj.chars.push(extraCharactors[j]);
}
// chars 배열의 길이
obj.nchars = obj.chars.length;
// chars배열에서의 문자 ch의 요소 번호를 구하는 메서드 ( ch를 chars배열에서 찾을 수 없을 때에는 null을 반환함)
obj.numberOf = function(ch) {
var code = ch.charCodeAt(0);
if( code>="a".charCodeAt(0) && code<="z".charCodeAt(0)) {
return code - "a".charCodeAt(0);
} else...