비주얼 베이직의 암호화 기법(?)
지금도 비주얼 베이직이 여러 분야에서 많이 사용되고 있다.
예전... 비주얼 베이직이 지금처럼 화려한(?) 함수를 갖기 전에 사용되던 암호화 기법을 자바로 convert한 것이다.
자세히 보면 알고리즘은 눈곱만큼도 들어있지 않다. 단지 비밀번호를 byte한 String으로 숫자를 더해 새로운 int 비밀번호 단어을 만드는 것뿐이다. 복잡할 뿐이지 곱하는 숫자에 현혹되어 어렵게 느낄 필요는 없다.
사실 이건 알고리즘이 아니라서 알고 있을 필요도 없다.
하지만 알고 있으면 한번은 유용하게 사용할 때가 있을 것이다.
참고로만 하면 된다.
public static String converPWD(String strpwd) {
int nDigitSum, nCnt;
String secretcode = "";
String passwordnum = "";
byte[] bytTemp = strpwd.getBytes();
for (nCnt = 0; nCnt < bytTemp.length; nCnt++) {
passwordnum += bytTemp[nCnt];
}
// 1. ---------------------------------------------------------------------------------------------------------
nDigitSum = 0;
for (nCnt = 1; nCnt <= passwordnum.length(); nCnt++)
{
switch (nCnt % 2)
{
case 1:
nDigitSum += 3 * Integer.parseInt(passwordnum.substring(nCnt - 1, nCnt));
break;
case 0:
nDigitSum += 7 * Integer.parseInt(passwordnum.substring(nCnt - 1, nCnt));
break;
}
}
secretcode = String.valueOf(10 - (nDigitSum % 10)).substring(String.valueOf(10 - (nDigitSum % 10)).length() - 1, String.valueOf(10 - (nDigitSum % 10)).length()) + passwordnum.substring(1, 2);
// 2. ---------------------------------------------------------------------------------------------------------
nDigitSum = 0;
for (nCnt = 1; nCnt <= passwordnum.length(); nCnt++)
{
switch (nCnt % 3)
{
case 1:
nDigitSum += 2 * Integer.parseInt(passwordnum.substring(nCnt - 1, nCnt));
break;
case 2:
nDigitSum += 5 * Integer.parseInt(passwordnum.substring(nCnt - 1, nCnt));
break;
case 0:
nDigitSum += 9 * Integer.parseInt(passwordnum.substring(nCnt - 1, nCnt));
break;
}
}
secretcode += String.valueOf(10 - (nDigitSum % 10)).substring(String.valueOf(10 - (nDigitSum % 10)).length() - 1, String.valueOf(10 - (nDigitSum % 10)).length()) + passwordnum.substring(3, 4);
//3. ----------------------------------------------------------------------------------------------------------
nDigitSum = 0;
for (nCnt = 1; nCnt <= passwordnum.length(); nCnt++)
{
switch (nCnt % 4)
{
case 1:
nDigitSum += 4 * Integer.parseInt(passwordnum.substring(nCnt - 1, nCnt));
break;
case 2:
nDigitSum += 8 * Integer.parseInt(passwordnum.substring(nCnt - 1, nCnt));
break;
case 3:
nDigitSum += 2 * Integer.parseInt(passwordnum.substring(nCnt - 1, nCnt));
break;
case 0:
nDigitSum += 6 * Integer.parseInt(passwordnum.substring(nCnt - 1, nCnt));
break;
}
}
secretcode += String.valueOf(10 - (nDigitSum % 10)).substring(String.valueOf(10 - (nDigitSum % 10)).length() - 1, String.valueOf(10 - (nDigitSum % 10)).length()) + passwordnum.substring(5, 6);
// 4. ---------------------------------------------------------------------------------------------------------
nDigitSum = 0;
for (nCnt = 1; nCnt <= passwordnum.length(); nCnt++)
{
switch (nCnt % 5)
{
case 1:
nDigitSum += 1 * Integer.parseInt(passwordnum.substring(nCnt - 1, nCnt));
break;
case 2:
nDigitSum += 3 * Integer.parseInt(passwordnum.substring(nCnt - 1, nCnt));
break;
case 3:
nDigitSum += 2 * Integer.parseInt(passwordnum.substring(nCnt - 1, nCnt));
break;
case 4:
nDigitSum += 0 * Integer.parseInt(passwordnum.substring(nCnt - 1, nCnt));
break;
case 0:
nDigitSum += 4 * Integer.parseInt(passwordnum.substring(nCnt - 1, nCnt));
break;
}
}
return secretcode += String.valueOf(10 - (nDigitSum % 10)).substring(String.valueOf(10 - (nDigitSum % 10)).length() - 1, String.valueOf(10 - (nDigitSum % 10)).length()) + passwordnum.substring(7, 8);
}
* 읽기 불편할 것으로 파일로 첨부하겠다.