며칠 전, 소문이 갑자기 인터넷에 나타났습니다. 특정 동쪽에서 12G의 데이터 유출이 발생했으며 결국 나는 성명서에서 그것을 거부하지 않았으며, 거의 인정되지 않았습니다. 이 문제가 평범한 사람들에게 어떤 영향을 미치는지, 어떻게 해야하는지에 대해 이미 많은 사람들이 있으므로 재미에 참여하지 않을 것입니다. 개인적으로 현재 비교적 안전하다고 생각하는 실용적인 암호화 알고리즘에 대해 이야기 해 봅시다 : Blowfish.
코드를 입력하기 전에 Blowfish 암호화 알고리즘의 특성에 대해 이야기하겠습니다.
1. 대칭 암호화, 즉 암호화 된 키와 해독 된 키는 동일합니다.
2. 각 암호화 후의 결과는 다릅니다 (이것은 내가 더 감사하는 것입니다).
3. 이전 기사에서 소개 된 MD5와 같은 추상 알고리즘과는 다른 가역적 인 경우 가역적입니다.
4. 빠른 속도, 암호화 및 암호 해독 공정은 기본적으로 ADD 및 XOR 명령 연산으로 구성됩니다.
5. 무료, 누구나 저작권 비용을 지불하지 않고 무료로 사용할 수 있습니다.
6. Blowfish는 한 번에 8 바이트의 데이터를 암호화하고 해독 할 수 있습니다.
Blowfish 알고리즘은 대칭 패킷 암호화 알고리즘입니다. 알고리즘의 핵심은 변수 길이 키를 총 길이 4168Byte의 서브 키 어레이로 확장하는 서브 키스 생성에 있습니다. 많은 수의 하위 키가 알고리즘에 사용되며 하위 키는 사용자 키에 의존합니다. 실제 첨가/암호 해독 프로세스에서 업데이트 된 서브 키 어레이, 즉 P 배열 및 S 상자가 사용됩니다. Blowfish 알고리즘에는 핵심 암호화 기능이 있습니다 : bf_en (). 이 기능의 입력은 64 비트 일반 텍스트 정보입니다. 계산 후 64 비트 암호 텍스트 정보 형식으로 출력됩니다. Blowfish 알고리즘을 사용하여 정보를 암호화하려면 주요 전처리 및 정보 암호화의 두 가지 프로세스가 필요합니다. 마찬가지로, 암호 해독은 또한 주요 전처리 및 정보 암호 해독의 두 가지 프로세스가 필요합니다.
Blowfish 알고리즘 -Pbox 및 Sbox의 소스 키가 수정되었습니다. 메시지를 암호화하려면 키를 선택 하고이 키를 사용하여 Pbox 및 Sbox를 변환하여 Key_pbox 및 key_sbox를 다음 정보 암호화 단계에 사용할 수 있도록해야합니다. 암호 해독도 마찬가지입니다. Blowfish는 대칭 암호화 알고리즘이므로 암호 해독 당사자는 키를 얻은 후 키를 기반으로 암호 해독에 필요한 key_box 및 key_sbox를 생성합니다. 동일한 정보를 암호화하고 해독하면 선택한 다른 키는 다른 암호화로 이어집니다. 따라서 Blowfish 알고리즘의 핵심은 키와 기밀성의 선택에 있습니다.
Blowfish 알고리즘은 가변 길이 키를 사용하기 때문에 사용자에게 편의성을 높일뿐만 아니라 숨겨진 위험도 있습니다. 알고리즘 암호화/암호 해독의 핵심은 키의 선택 및 기밀성에있어 실제 응용 분야에서 일부 약한 키는 종종 정보 자원을 암호화하는 데 사용되므로 보안 위험이 크게 높아집니다.
다음은 Blowfish 암호화 알고리즘의 구현 인 가장 중요한 부분입니다.
패키지 cn.bridgeli.encrypt; public enum blowfishmanager {bridgeli_cn ( "bridgeli_cn!@#$ abc123_"); Private BlowfishManager (String Secret) {this.blowfish = New Blowfish (Secret); } 개인 블로우 피쉬 블로우 피쉬; 공개 블로우 피쉬 getblowfish () {return blowfish; } / ** * decrypt * @param sciphertext * @return * / public string decryptstring (String sciphertext) {return this.getBlowfish (). decryptstring (sciphertext); } / ** * encrypt * @param splaintext * @return * / public string encryptstring (String splaintext) {return this.getBlowfish (). EncryptString (splaintext); } public static void main (String [] args) {String EncrypTstring = blowfishmanager.bridgeli_cn.encryptstring (10 + ""); System.out.println (EncryptString); 문자열 decryptstring = blowfishmanager.bridgeli_cn.decryptstring (encryptstring); System.out.println (decryptstring); }}이것은 외부 인터페이스로 사용하기가 매우 간단하며 사용자 친화적입니다. 다음은 알고리즘의 특정 구현입니다.
패키지 cn.bridgeli.encrypt; import java.security.messagegegest; import java.util.random; import org.slf4j.logger; import org.slf4j.loggerfactory; public static final logger log = loggerfactory.getlogger (blowfish.getlogger); 개인 정적 클래스 blowfishcbc는 blowfishecb {public void setcbciv (long lnewcbciv) {m_lcbciv = lnewcbciv; } public void setcbciv (byte newcbciv []) {m_lcbciv = blowfish.bytearraytolong (newcbciv, 0); } @override public void cleanup () {m_lcbciv = 0l; super.cleanup (); } private long encryptblockcbc (long lplainblock) {lplainblock ^= m_lcbciv; lplainblock = super.encryptBlock (lplainblock); 반환 m_lcbciv = lplainblock; } private long decryptblockcbc (long lcipherblock) {long ltemp = lcipherblock; lcipherblock = super.decryptBlock (lcipherblock); lcipherblock ^= m_lcbciv; m_lcbciv = ltemp; 리턴 lcipherblock; } public void alcrypt (byte buffer []) {int nlen = buffer.length; for (int ni = 0; ni <nlen; ni += 8) {long ltemp = blowfish.bytearraytolong (버퍼, ni); ltemp = EncryptBlockcbc (ltemp); blowfish.longtobytearray (ltemp, 버퍼, NI); }} public void decrypt (byte buffer []) {int nlen = buffer.length; for (int ni = 0; ni <nlen; ni += 8) {long ltemp = blowfish.bytearraytolong (버퍼, ni); ltemp = decryptblockcbc (ltemp); blowfish.longtobytearray (ltemp, 버퍼, NI); }} long m_lcbciv; public blowfishcbc (byte bfkey []) {super (bfkey); setcbciv (0l); } public blowfishcbc (byte bfkey [], long linitcbciv) {super (bfkey); setcbciv (linitcbciv); } public blowfishcbc (byte bfkey [], byte initcbciv []) {super (bfkey); setcbciv (initcbciv); }} private static class blowfishecb {public void cleanup () {for (int ni = 0; ni <18; ni ++) {m_pbox [ni] = 0; } for (int ni = 0; ni <256; ni ++) {m_sbox1 [ni] = m_sbox2 [ni] = m_sbox3 [ni] = m_sbox4 [ni] = 0; }} 보호 된 긴 암호 블록 (long lplainblock) {int nhi = blowfish.longhi32 (lplainblock); int nlo = blowfish.longlo32 (lplainblock); int sbox1 [] = m_sbox1; int sbox2 [] = m_sbox2; int sbox3 [] = m_sbox3; int sbox4 [] = m_sbox4; int pbox [] = m_pbox; nhi ^= pbox [0]; nlo ^ = (sbox1 [nhi >> 24] + sbox2 [nhi >>> 16 & 0xff] ^ sbox3 [nhi >> 8 & 0xff]) + sbox4 [nhi & 0xff] ^ pbox [1]; nhi ^ = (sbox1 [nlo >> 24] + sbox2 [nlo >>> 16 & 0xff] ^ sbox3 [nlo >>> 8 & 0xff]) + sbox4 [nlo & 0xff] ^ pbox [2]; nlo ^ = (sbox1 [nhi >> 24] + sbox2 [nhi >>> 16 & 0xff] ^ sbox3 [nhi >>> 8 & 0xff]) + sbox4 [nhi & 0xff] ^ pbox [3]; nhi ^ = (sbox1 [nlo >> 24] + sbox2 [nlo >>> 16 & 0xff] ^ sbox3 [nlo >>> 8 & 0xff]) + sbox4 [nlo & 0xff] ^ pbox [4]; nlo ^ = (sbox1 [nhi >> 24] + sbox2 [nhi >>> 16 & 0xff] ^ sbox3 [nhi >> 8 & 0xff]) + sbox4 [nhi & 0xff] ^ pbox [5]; nhi ^ = (sbox1 [nlo >> 24] + sbox2 [nlo >>> 16 & 0xff] ^ sbox3 [nlo >>> 8 & 0xff]) + sbox4 [nlo & 0xff] ^ pbox [6]; nlo ^ = (sbox1 [nhi >> 24] + sbox2 [nhi >>> 16 & 0xff] ^ sbox3 [nhi >> 8 & 0xff]) + sbox4 [nhi & 0xff] ^ pbox [7]; nhi ^ = (sbox1 [nlo >> 24] + sbox2 [nlo >>> 16 & 0xff] ^ sbox3 [nlo >> 8 & 0xff]) + sbox4 [nlo & 0xff] ^ pbox [8]; nlo ^ = (sbox1 [nhi >> 24] + sbox2 [nhi >>> 16 & 0xff] ^ sbox3 [nhi >> 8 & 0xff]) + sbox4 [nhi & 0xff] ^ pbox [9]; nhi ^ = (sbox1 [nlo >> 24] + sbox2 [nlo >>> 16 & 0xff] ^ sbox3 [nlo >>> 8 & 0xff]) + sbox4 [nlo & 0xff] ^ pbox [10]; nlo ^ = (sbox1 [nhi >> 24] + sbox2 [nhi >>> 16 & 0xff] ^ sbox3 [nhi >> 8 & 0xff]) + sbox4 [nhi & 0xff] ^ pbox [11]; nhi ^ = (sbox1 [nlo >> 24] + sbox2 [nlo >>> 16 & 0xff] ^ sbox3 [nlo >>> 8 & 0xff]) + sbox4 [nlo & 0xff] ^ pbox [12]; nlo ^ = (sbox1 [nhi >> 24] + sbox2 [nhi >>> 16 & 0xff] ^ sbox3 [nhi >> 8 & 0xff]) + sbox4 [nhi & 0xff] ^ pbox [13]; nhi ^ = (sbox1 [nlo >> 24] + sbox2 [nlo >>> 16 & 0xff] ^ sbox3 [nlo >>> 8 & 0xff]) + sbox4 [nlo & 0xff] ^ pbox [14]; nlo ^ = (sbox1 [nhi >> 24] + sbox2 [nhi >>> 16 & 0xff] ^ sbox3 [nhi >> 8 & 0xff]) + sbox4 [nhi & 0xff] ^ pbox [15]; nhi ^ = (sbox1 [nlo >> 24] + sbox2 [nlo >>> 16 & 0xff] ^ sbox3 [nlo >> 8 & 0xff]) + sbox4 [nlo & 0xff] ^ pbox [16]; 반환 blowfish.makelong (nhi, nlo ^ pbox [17]); . int nlo = blowfish.longlo32 (lcipherblock); nhi ^= m_pbox [17]; nlo ^ = (m_sbox1 [nhi >>> 24] + m_sbox2 [nhi >>> 16 & 0xff] ^ m_sbox3 [nhi >>> 8 & 0xff]) + m_sbox4 [nhi & 0xff] ^ m_pbox [16]; nhi ^ = (m_sbox1 [nlo >>> 24] + m_sbox2 [nlo >>> 16 & 0xff] ^ m_sbox3 [nlo >> 8 & 0xff]) + m_sbox4 [nlo & 0xff] ^ m_pbox [15]; nlo ^ = (m_sbox1 [nhi >>> 24] + m_sbox2 [nhi >>> 16 & 0xff] ^ m_sbox3 [nhi >>> 8 & 0xff]) + m_sbox4 [nhi & 0xff] ^ m_pbox [14]; nhi ^ = (m_sbox1 [nlo >>> 24] + m_sbox2 [nlo >>> 16 & 0xff] ^ m_sbox3 [nlo >> 8 & 0xff]) + m_sbox4 [nlo & 0xff] ^ m_pbox [13]; nlo ^ = (m_sbox1 [nhi >>> 24] + m_sbox2 [nhi >>> 16 & 0xff] ^ m_sbox3 [nhi >>> 8 & 0xff]) + m_sbox4 [nhi & 0xff] ^ m_pbox [12]; nhi ^ = (m_sbox1 [nlo >>> 24] + m_sbox2 [nlo >>> 16 & 0xff] ^ m_sbox3 [nlo >> 8 & 0xff]) + m_sbox4 [nlo & 0xff] ^ m_pbox [11]; nlo ^ = (m_sbox1 [nhi >>> 24] + m_sbox3 [nlo >> 8 & 0xff]) + m_sbox4 [nlo & 0xff] ^ m_pbox [11]; nlo ^ = (m_sbox1 [nhi >>> 24] + m_sbox2 [nhi >>> 16 & 0xff] ^ m_sbox3 [nhi >>> 8 & 0xff]) + m_sbox4 [nhi & 0xff] ^ m_pbox [10]; nhi ^ = (m_sbox1 [nlo >>> 24] + m_sbox2 [nlo >>> 16 & 0xff] ^ m_sbox3 [nlo >> 8 & 0xff]) + m_sbox4 [nlo & 0xff] ^ m_pbox [9]; nlo ^ = (m_sbox1 [nhi >> 24] + m_sbox2 [nhi >>> 16 & 0xff] ^ m_sbox3 [nhi >>> 8 & 0xff]) + m_sbox4 [nhi & 0xff] ^ m_pbox [8]; nhi ^ = (m_sbox1 [nlo >> 24] + m_sbox2 [nlo >>> 16 & 0xff] ^ m_sbox3 [nlo >> 8 & 0xff]) + m_sbox4 [nlo & 0xff] ^ m_pbox [7]; nlo ^ = (m_sbox1 [nhi >>> 24] + m_sbox2 [nhi >>> 16 & 0xff] ^ m_sbox3 [nhi >>> 8 & 0xff]) + m_sbox4 [nlo & 0xff] ^ m_pbox [7]; nlo ^ = (m_sbox1 [nhi >>> 24] + m_sbox2 [nhi >>> 16 & 0xff] ^ m_sbox3 [nhi >>> 8 & 0xff]) + m_sbox4 [nhi & 0xff] ^ m_pbox [6]; nhi ^ = (m_sbox1 [nlo >>> 24] + m_sbox2 [nlo >>> 16 & 0xff] ^ m_sbox3 [nlo >> 8 & 0xff]) + m_sbox4 [nlo & 0xff] ^ m_pbox [5]; nlo ^ = (m_sbox1 [nhi >>> 24] + m_sbox2 [nhi >>> 16 & 0xff] ^ m_sbox3 [nhi >>> 8 & 0xff]) + m_sbox4 [nhi & 0xff] ^ m_pbox [4]; nhi ^ = (m_sbox1 [nhi >>> 24] + m_sbox2 [nhi >>> 16 & 0xff] ^ m_sbox3 [nhi >>> 8 & 0xff]) + m_sbox4 [nhi & 0xff] ^ m_pbox [4]; nhi ^ = (m_sbox1 [nlo >>> 24] + m_sbox2 [nlo >>> 16 & 0xff] ^ m_sbox3 [nlo >> 8 & 0xff]) + m_sbox4 [nlo & 0xff] ^ m_pbox [3]; nlo ^ = (m_sbox1 [nhi >>> 24] + m_sbox2 [nhi >>> 16 & 0xff] ^ m_sbox3 [nhi >>> 8 & 0xff]) + m_sbox4 [nhi & 0xff] ^ m_pbox [2]; nlo ^ = (m_sbox1 [nlo >>> 24] + m_sbox2 [nlo >>> 16 & 0xff] ^ m_sbox3 [nlo >>> 8 & 0xff]) + m_sbox4 [nlo & 0xff] ^ m_pbox [1]; 반환 blowfish.makelong (nhi, nlo ^ m_pbox [0]); } int m_pbox []; int m_sbox1 []; int m_sbox2 []; int m_sbox3 []; int m_sbox4 []; 정적 최종 int pbox_init [] = {0x243f6a88, 0x85a308d3, 0x13198a2e, 0x3707344, 0xa4093822, 0x299f31d0, 0x82efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xBE5466CF, 0x34E90C6C, 0XC0AC29B7, 0XC97C50DD, 0x3F84D5B5, 0XB5470917, 0x9216D5D9, 0x897999999999999999999999999999999999999999999999999999999999999991b; 정적 최종 int sbox_init_1 [] = {0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a1947, 0xb39, 0x801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0xd95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b541d. 0xc25a59b5, 0x9c30d539, 0x2af26013, 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0x6c9e8b, 0xD71577C1, 0XBD314B27, 0x78AF2FDA, 0x55605C60, 0xE65525F3, 0XAA55AB94, 0x57489862, 0x63E81440, 0x55CA396A, 0x2AAB10B6, 0XB4C5C396A. 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c. 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487caC60, 0x5032, 0xef85d5d. 0XE98575B1, 0XDC262302, 0xEB651B88, 0x23893E81, 0xD396ACC5, 0xF6D6FF3, 0X83F44239, 0x2E0B4482, 0XA4842004, 0X69C8F04A, 0X9E1F9B50 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x13a3be4, 0x3bf050, 0x960fa728. 0x7efb2a98, 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, 0xe06f75d8, 0x85c1203, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x49b, 0x37d0d724, 0x37d0d724. 0x80991B7B, 0x25D479D8, 0XF6E8DEF7, 0XE3FE501A, 0XB6794C3B, 0x976CE0BD, 0X4C006BA, 0XC1A94FB6, 0X409F60C4, 0X5E5C9EC2, 0X196A2463, 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x6600f2807. 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679F2Fe 0x8ea5e9f8, 0xDB3222f8, 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, 0x9e5c57bb. 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0xb8f011a0. 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0xd28e49bc. 0x62fb1341, 0xcee4c6e8, 0xef20Cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xD08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1aad. 0x2f2218, 0xBe0E1777, 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7 0xD2ADA8D9, 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, 0xbcdaf0c, 0x7b3b3e89a. 0xd6411bd3, 0xae1e7e49, 0x250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xf009b91e. 0xD95A537F, 0x207d5ba2, 0x2e5b9c5, 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b5152, 0x9a53294a 0xD60F573F, 0XBC9B6E4, 0x2B60A476, 0x81E67400, 0x8ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9b6, 0xff340521, 0xf340521. 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x8ba4799, 0x6e85076a}; 정적 최종 INT SBOX_INIT_2 [] = {0X4B7A70E9, 0xB5B32944, 0XDB75092E, 0XC4192623, 0XAD60B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, 0XECAA8C71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, 0x6fe4d6, 0x99fd6, 0x99fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x21ecc5e, 0x9686b3f, 0x3ebaefc9, 0x3c971814. 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xB79C5305, 0xAAAAAA500737, 0x3E07841C, 0X7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, 0XB03ADA37, 0XF0500C0D. 0xf01c1f04, 0x200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581. 0x37c2dadc, 0xc8b57634, 0x9af3dda7, 0xa9446146, 0xfd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x3280bba1. 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, 0xde9a771f, 0xd9930810, 0x3810810, 0xDCCF3F2E, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xc7aec3a, 0xdb851dfa. 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x13aeddd 0x10314E55, 0x81AC77D6, 0x5F11199B, 0x43556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x153c6e, 0x153c6e, 0xf28fe6ed 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x526c826c825, 0x55, 0x598, 0x9c10b36a, 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 0x5223a708, 0xf708, 0xf708, 0x5223a. 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x18cff28, 0xc332ddef, 0xbe6c5aa5, 0x6582185, 0x68ab9802, 0xeecea50f, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84, 0x1521B628, 0x29076170, 0xecdd4775, 0x619F1510, 0x13CCA830, 0XEB61BD96, 0X334FE1E, 0XAO03634FE. 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0XCBAADE14, 0XEECC86BC, 0x6066222CA7, 0X9CAB5CAB, 0XB2F3846E, 0x648B1EAF, 0x19BDF0CA, 0XA02369B9, 0XB2F3846E. 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf83789889889a, 0x95f7997e, 0x623d7da8, 0x11ed935f, 0x16681281, 0xe358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1Ac24696, 0x1B30BATE 0x532E3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45ee2b6, 0xa3aaaabea, 0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e79e, 0x86854dc7. 0x3d816250, 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, 0x95bbf00, 0xad19d. 0x1462B174, 0x23820E00, 0x58428D2A, 0XC55F5EA, 0X1DADF43E, 0x233F7061, 0x3372F092, 0x8D937E41, 0xD65FECF1, 0X6C223BDB 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5aabfc, 0x800bcad. 0x9e447a2e, 0xc3453484, 0xfdd56705, 0xe1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8d8, 0x3d28, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7}; 정적 최종 INT SBOX_INIT_3 [] = {0XE93D5A68, 0x948140F7, 0XF64C261C, 0x94692934, 0x411520f7, 0x7602d4f7, 0xBCF46B2E, 0xD4A20068, 0xD4082471 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af, 0x70f4dd3, 0x66a02f4, 0x66a02f4, 0x66a02f4dd3 0xBFBC09EC, 0X3BD9785, 0x7fac6dd0, 0x31cb8504, 0x96eb27b3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, 0x28507825, 0x530429F4, 0xA2C86DA 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd375fec, 그리고 0xd375fec, 0xb58ce006. 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6ea7b2, 0x4b6d1856. 0xDD5B4332, 0x6841E7F7, 0XCA7820FB, 0XFB0AF54E, 0XD8FEB397, 0x454056AC, 0XBA489527, 0x55533A3A, 0x20838D87, 0XFE6BA9B7, 0XD096954B 0x55A867BC, 0XA1159A58, 0xCCA92963, 0x99E1DB33, 0xA62A4A56, 0x3F3125F9, 0X5EF47E1C, 0X9029317C, 0X9029317C, 0XFDF8E802, 0X42F70, 0X80BB15, 0x5282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, 0x7f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f5f51eb, 0x4779a4, 0x41041f0f. 0xF2BCC18F, 0x41113564, 0x257B7834, 0x602A9C60, 0xdff8e8a3, 0x1f636c1b, 0xe12b4c2, 0x2e1329e, 0xaf664fd1, 0xcad18115, 0x6b2395e0 0x333E92E1, 0x3B240B62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe72, 0x62, 0x647d02, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0xa476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebdf8, 0xdf8, 0xdf8, 0x3a6f6eab. 0xDB6E6B0D, 0XC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, 0xF1290DC7, 0XCC00FFA3, 0xB5390F92, 0x690FED0B, 0x67B9B9B9B9B9B9B9B9B9 0XA091CF0B, 0XD9155EA3, 0XBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, 0X37392EB3, 0XCC115979, 0X8026E297, 0XF42E312D, 0X6842ACA. 0xc66a2b3b, 0x12754ccc, 0x782ef11c, 0x6a124237, 0xb79251e7, 0x6a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bddd8, 0xe2e1c3c9, 0x44421659, 0xa121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf086, 0x60787bf8 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fcc, 0x83426b33, 0xf01eb71, 0xb0804187, 0x3c005e5f, 0x7be, 0xbde8ae24. 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9, 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x46e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 0xb90bace1, 0xb8205d0, 0x11a8624 0x7574A99E, 0xB77F19B6, 0xe0A9DC09, 0x662D09A1, 0xc4324633, 0xe85A1F02, 0x9F0BE8c, 0x4A99A025, 0x1D6efe10, 0x11d, 0xBa5A4d, 0x93d1d, 0xBa5A4df. 0XA186F20F, 0x2868F169, 0xDCB7DA83, 0x573906FE, 0XA1E2CE9B, 0x4FCD7F52, 0X50115E01, 0xA70683FA, 0XA002B5C4, 0XDE6D027, 0X9AF88C27 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x6058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xc2c214. 0xBBCBEE56, 0X90BCB6DE, 0xEBFC7DA1, 0XCE591D76, 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7c927c24, 0x86E3725F, 0X724D9DB9, 0x86E3725F, 0x39720A3D. 0xD39EB8FC, 0XED545578, 0x8FCA5B5, 0XD83D7CD3, 0X4DAD0FC4, 0x1E50EF5E, 0XB161E6F8, 0XA28514D9, 0X6C5113C, 0X6FD5C7E7, 0x56E14EC4 0x362abfce, 0xDDC6C837, 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0}; 정적 최종 INT SBOX_INIT_4 [] = {0x3A39CE37, 0xD3FAF5CF, 0XABC27737, 0x5AC52D1B, 0X5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9B, 0XD5118E9D, 0xBF0F7315, 0XD62D1C7E, 0xc700c47b, 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, 0x5748AB2F, 0XBC946E79, 0XC6A376D2, 0X6549 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x86e2, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa3a3ae1, 0x4ba9586 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe90fd5a, 0x990fd5a, 0x990fd5a, 0x9b09e6ad, 0x87b08601, 0x2cf0b7d9, 0x22b8b51, 0x96d5ac3a, 0x17da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71 0XE019A5E6, 0x47B0ACFD, 0XED93FA9B, 0XE8D3C48D, 0x283B57CC, 0XF8D56629, 0X79132E28, 0X785F0191, 0XED756055, 0XF70E44, 0XE35, 0XE3D33D3555, 0x79132E28 0x15056dd4, 0x88f46dba, 0x3a16125, 0x564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf5946, 0x1e6321f5, 0xa93a072a. 0x26dcf319, 0x7533d928, 0xB155FDF5, 0x3563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 0x4de8151, 0x3830dc8e, 0x4de81751. 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0x6413e680 0xDD6DB224, 0x69852DFD, 0x9072166, 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0X1C20C8AE, 0x5BBEF7DD, 0X1B588D40, 0XCCD2017F, 0x6BB4E3BB, 0X6BB4E3BB, 0X1C20C8AE. 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, 0x72EACEA8, 0XFA6484BB, 0X8D6612AE, 0XBF3C6F47, 0XD29BE463, 0X542F5D9E, 0XAEC271B 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x115af84, 0x4eb4e2cc, 0x4eb4e2cc. 0x6b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520ab82, 0x11a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, 0xa0839e1 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a, 0xdodecb, 0xdodecb, 0xdodecb. 0x339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6e6e6e6e6e6e6e6a, 0x27d9459c, 0x27d9459c, 0x27d9459c, 0xf2d519ff. 0x9B941525, 0xFAE59361, 0xCEB69CEB, 0XC2A86459, 0X12BAA8D1, 0XB6C1075E, 0XE3056A0C, 0x10D25065, 0xCB03A442, 0XE0EC6E0E, 0x1698dB3B 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359 0x9b992f2e, 0xe60b6f47, 0xfe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6f229, 0x848fd2c5 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126, 0xB2040222, 0xB6CBCF7C, 0XCD769C2B, 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0X2547ADF0, 0xBA38209C, 0XF746CE76, 0X77AFA1C5, 0x20756060, 0xBA38209C. 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x2fb8a8c, 0x1c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d. 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6}; public blowfishecb (byte bfkey []) {m_pbox = new int [18]; for (int ni = 0; ni <18; ni ++) {m_pbox [ni] = pbox_init [ni]; } m_sbox1 = new int [256]; m_sbox2 = 새로운 int [256]; m_sbox3 = 새로운 int [256]; m_sbox4 = 새로운 int [256]; for (int ni = 0; ni <256; ni ++) {m_sbox1 [ni] = sbox_init_1 [ni]; m_sbox2 [ni] = sbox_init_2 [ni]; m_sbox3 [ni] = sbox_init_3 [ni]; m_sbox4 [ni] = sbox_init_4 [ni]; } int nlen = bfkey.length; if (nlen == 0) {return; } int nkeypos = 0; int nbuild = 0; for (int ni = 0; ni <18; ni ++) {for (int nj = 0; nj <4; nj ++) {nbuild = nbuild << 8 | bfkey [nkeypos] & 0xff; if (++ nkeypos == nlen) {nkeypos = 0; }} m_pbox [ni] ^= nbuild; } long lzero = 0l; for (int ni = 0; ni <18; ni += 2) {lzero = EncryptBlock (lzero); m_pbox [ni] = (int) (lzero >>> 32); m_pbox [ni + 1] = (int) (lzero & 0xffffffffl); } for (int ni = 0; ni <256; ni += 2) {lzero = encryptBlock (lzero); m_sbox1 [ni] = (int) (lzero >>> 32); m_sbox1 [ni + 1] = (int) (lzero & 0xfffffffffl); } for (int ni = 0; ni <256; ni += 2) {lzero = encryptBlock (lzero); m_sbox2 [ni] = (int) (lzero >>> 32); m_sbox2 [ni + 1] = (int) (lzero & 0xfffffffffl); } for (int ni = 0; ni <256; ni += 2) {lzero = encryptBlock (lzero); m_sbox3 [ni] = (int) (lzero >>> 32); m_sbox3 [ni + 1] = (int) (lzero & 0xffffffffffl); } for (int ni = 0; ni <256; ni += 2) {lzero = encryptBlock (lzero); m_sbox4 [ni] = (int) (lzero >>> 32); m_sbox4 [ni + 1] = (int) (lzero & 0xffffffffl); }}} public blowfish (String password) {MessageDigest digest = null; try {digest = messagedigest.getInstance ( "sha1"); digest.update (password.getBytes ()); } catch (예외 e) {log.error (e.getMessage (), e); } m_bfish = 새로운 blowfishcbc (digest.digest (), 0l); Digest.reset (); } public String EncryPtString (String SplainText) {long lcbciv; 동기화 (m_rndgen) {lcbciv = m_rndgen.nextlong (); } return encstr (splaintext, lcbciv); } 개인 문자열 encstr (String splaintext, long lnewcbciv) {int nstrlen = splaintext.length (); 바이트 buf [] = 새로운 바이트 [(nstrlen << 1 & -8) + 8]; int npos = 0; for (int ni = 0; ni <nstrlen; ni ++) {char cactchar = splaintext.charat (ni); buf [npos ++] = (byte) (Cactchar >> 8 & 0xff); buf [npos ++] = (바이트) (Cactchar & 0xff); } byte bpadval = (byte) (buf.length- (nstrlen << 1)); while (npos <buf.length) {buf [npos ++] = bpadval; } m_bfish.setcbciv (lnewcbciv); m_bfish.encrypt (buf); 바이트 newcbciv [] = 새로운 바이트 [8]; longtobytearray (lnewcbciv, newcbciv, 0); BytestobinHex (NewCBCIV, 0, 8) + ByTestobinHex (Buf, 0, Buf.Length); } public String decryptstring (String sciphertext) {int nlen = sciphertext.length () >> 1 & -8; if (nlen <8) {return null; } byte cbciv [] = 새로운 바이트 [8]; int nnumofbytes = binhextobytes (sciphertext, cbciv, 0, 0, 8); if (nnumofbytes <8) {return null; } m_bfish.setcbciv (cbciv); if ((nlen- = 8) == 0) {return ""; } byte buf [] = 새로운 바이트 [nlen]; nnumofbytes = binhextobytes (Sciphertext, buf, 16, 0, nlen); if (nnumofbytes <nlen) {return null; } m_bfish.decrypt (buf); int npadbyte = buf [buf.length -1] & 0xff; if (npadbyte> 8 || npadbyte <0) {npadbyte = 0; } nnumofbytes- = npadbyte; if (nnumofbytes <0) {return ""; } else {return bytearraytouncstring (buf, 0, nnumofbytes); }} public void destroy () {m_bfish.cleanup (); } private static long bytearraytolong (byte buffer [], int nstartIndex) {return (long) 버퍼 [nstartIndex] << 56 | (버퍼 [nstartIndex + 1] & 255L) << 48 | (버퍼 [nstartIndex + 2] & 255L) << 40 | (버퍼 [nstartIndex + 3] & 255L) << 32 | (버퍼 [nstartIndex + 4] & 255L) << 24 | (버퍼 [nstartIndex + 5] & 255L) << 16 | (버퍼 [nstartIndex + 3] & 255L) << 32 | (버퍼 [nstartIndex + 4] & 255L) << 24 | (버퍼 [nstartIndex + 5] & 255L) << 16 | (버퍼 [nstartIndex + 6] & 255L) << 8 | 버퍼 [nstartindex + 7] & 255L; } private static void longtobytearray (long lvalue, byte buffer [], int nstartIndex) {buffer [nstartIndex] = (byte) (int) (lvalue >>> 56); 버퍼 [nstartIndex + 1] = (byte) (int) (lvalue >>> 48 & 255l); 버퍼 [nstartIndex + 2] = (byte) (int) (lvalue >>> 40 & 255L); 버퍼 [nstartIndex + 3] = (byte) (int) (lvalue >>> 32 & 255L); 버퍼 [nstartIndex + 4] = (byte) (int) (lvalue >>> 24 & 255l); 버퍼 [nstartIndex + 5] = (byte) (int) (lvalue >>> 16 & 255l); 버퍼 [nstartIndex + 6] = (byte) (int) (lvalue >>> 8 & 255l); 버퍼 [nstartIndex + 7] = (바이트) (int) lvalue; } private static long makelong (int nlo, int nhi) {return (long) nhi << 32 | NLO & 0xfffffffffl; } private static int longlo32 (long lval) {return (int) lval; } private static int longhi32 (long lval) {return (int) (lval >>> 32); } private static string bytestobinHex (byte data [], int nstartpos, int nnumofbytes) {StringBuffer sbuf = new StringBuffer (); sbuf.setlength (nnumofbytes << 1); int npos = 0; for (int ni = 0; ni <nnumofbytes; ni ++) {sbuf.setcharat (npos ++, hextab [data [ni+nstartpos] >> 4 & 0xf]); sbuf.setcharat (npos ++, hextab [data [ni+nstartpos] & 0xf]); } return sbuf.toString (); } private static int binhextobytes (String sbinhex, byte data [], int nsrcpos, int ndstpos, int nnumofbytes) {int nstrlen = sbinhex.length (); int navailbytes = nstrlen -nsrcpos >> 1; if (navailbytes <nnumofbytes) {nnumofbytes = navailbytes; } int noutputCapacity = data.length -ndstpos; if (nnumofbytes> noutputCapacity) {nnumofbytes = noutputCapacity; } int nresult = 0; for (int ni = 0; ni <nnumofbytes; ni ++) {byte bactbyte = 0; 부울 blconvertok = true; for (int nj = 0; nj <2; nj ++) {bactbyte << = 4; char cactchar = sbinhex.charat (nsrcpos ++); if (cactchar> = 'a'&& cactchar <= 'f') {bactbyte | = (byte) (Cactchar -97) + 10; 계속하다; } if (cactchar> = '0'&& cactchar <= '9') {bactbyte | = (byte) (Cactchar -48); } else {blconvertok = false; }} if (cactchar> = '0'&& cactchar <= '9') {bactbyte | = (byte) (Cactchar -48); } else {blconvertok = false; }} if (blconvertok) {data [ndstpos ++] = bactbyte; nresult ++; }} 반환 nresult; } private static string bytearraytouncstring (byte data [], int nstartpos, int nnumofbytes) {nnumofbytes & = -2; int navailcapacity = data.length -nstartpos; if (navailcapacity <nnumofbytes) {nnumofbytes = navailcapacity; } StringBuffer sbuf = new StringBuffer (); sbuf.setlength (nnumofbytes >> 1); int nsbufpos = 0; for (; nnumofbytes> 0; nnumofbytes- = 2) {sbuf.setcharat (nsbufpos ++, (char) (data [nstartpos] << 8 | data [nstartpos+1] & 0xff)); nstartpos += 2; } return sbuf.toString (); } private blowfishcbc m_bfish; 개인 정적 임의의 M_RNDGEN = 새로운 랜덤 (); 정적 최종 char hextab [] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};}요약
위의 것은 Java 언어로 Blowfish 암호화 알고리즘의 전체 코드를 구현하는 것에 대한이 기사의 모든 내용입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오.