티스토리 뷰



지금도 비주얼 베이직이 여러 분야에서 많이 사용되고 있다.

예전... 비주얼 베이직이 지금처럼 화려한(?) 함수를 갖기 전에 사용되던 암호화 기법을 자바로 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);

}


* 읽기 불편할 것으로 파일로 첨부하겠다.



댓글