Alguns dias atrás, os rumores apareceram de repente na Internet: um vazamento de dados de 12g em um certo leste e, no final, não neguei em comunicado e mal foi admitido. Já existem muitas pessoas que disseram o impacto que esse assunto tem nas pessoas comuns e como fazê -lo, então não vou me juntar à diversão. Vamos falar sobre um algoritmo de criptografia prático que eu pessoalmente acho relativamente seguro no momento: Blowfish.
Antes de inserir o código, deixe -me falar sobre as características do algoritmo de criptografia Blowfish:
1. A criptografia simétrica, ou seja, a chave criptografada e a chave descriptografada são as mesmas;
2. Os resultados após cada criptografia são diferentes (isso é algo que eu aprecio mais);
3. Reversível, diferente dos algoritmos abstratos, como o MD5 introduzido no meu artigo anterior, é reversível;
4. Velocidade rápida, o processo de criptografia e descriptografia é basicamente composto de operações de instrução ADD e XOR;
5. GRATUITAMENTE, qualquer pessoa pode usá -lo gratuitamente sem pagar taxas de direitos autorais;
6. Blowfish pode apenas criptografar e descriptografar 8 bytes de dados por vez;
O algoritmo Blowfish é um algoritmo de criptografia de pacotes simétricos. O núcleo do algoritmo está na geração de subthays, que expande a tecla de comprimento variável para uma matriz subsequente com um comprimento total de 4168byte. Um grande número de subthays é usado no algoritmo, e as subtides dependem da chave do usuário. No processo de adição/descriptografia real, a matriz de subchave atualizada é usada, a saber, a matriz P e a caixa S. O algoritmo Blowfish possui uma função de criptografia central: BF_EN (). A entrada desta função é informações de texto simples de 64 bits. Após o cálculo, ele é emitido na forma de informações de cifra de 64 bits. Para criptografar informações usando o algoritmo Blowfish, são necessários dois processos: Criptografia de pré -processamento e informação -chave. Da mesma forma, a descriptografia também requer dois processos, pré -processamento e descriptografia de informações.
A chave de origem do algoritmo Blowfish - PBOX e SBOX são fixos. Se queremos criptografar uma mensagem, precisamos escolher uma chave e usar essa tecla para transformar o PBOX e o SBOX para obter o key_pbox e o key_sbox a serem usados para a próxima etapa da criptografia de informação. O mesmo vale para a descriptografia. Como o Blowfish é um algoritmo de criptografia simétrica, a parte de descriptografia gera o key_box e o key_sbox necessário para descriptografia com base na chave após a obtenção da chave. Criptografar e descriptografar as mesmas informações, e as diferentes chaves selecionadas levarão a diferentes textos cifrões. Portanto, a chave do algoritmo Blowfish está na escolha de chave e confidencialidade.
Como o algoritmo Blowfish usa teclas de comprimento variável, isso não apenas traz grande conveniência para os usuários, mas também tem perigos ocultos. Como o núcleo da criptografia/descriptografia do algoritmo está na seleção e confidencialidade das chaves, em aplicações reais, algumas chaves fracas são frequentemente usadas para criptografar os recursos de informação, resultando em grandes riscos de segurança.
Em seguida, é a parte mais importante, a implementação do algoritmo de criptografia Blowfish:
pacote cn.bridgeli.encrypt; public enum blowfishmanager {bridgeli_cn ("bridgeli_cn!@#$ abc123_"); BlowfishManager privado (segredo da string) {this.blowfish = new Blowfish (secreto); } Blowfish Private Blowfish; public blowfish 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); String decryptstring = blowfishmanager.bridgeli_cn.decryptString (EncryptString); System.out.println (DecryptString); }}Esta é uma interface externa, que é muito simples de usar e é fácil de usar. A seguir, a implementação específica do algoritmo:
pacote cn.bridgeli.encrypt; importar java.security.messagedigest; importar java.util.random; importar org.slf4j.logger; importar org.slf4j.loggerFactory; public class Blowfish {private static logger logger = loggerFactory.GetLogger (blowflight; classe estática privada blowfishcbc estende o 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 (LPLAIN LANTE) {LPLAINBLOCK ^= M_LCBCIV; lplainBlock = super.EncryptBlock (lplainBlock); return m_lcbciv = lplainBlock; } private Long DecryptBlockCbc (LCIPHBLOCK LONG LCIPER) {LONG LTEMP = LcipherBlock; LcipherBlock = super.DecryptBlock (LCIPHERBLOCK); LcipherBlock ^= m_lcbciv; m_lcbciv = ltemp; retornar Lcipherblock; } public void Encrypt (buffer de byte []) {int nlen = buffer.length; for (int ni = 0; ni <nlen; ni += 8) {long ltemp = blowfish.bytearraytolong (buffer, ni); LTemp = EncryptBlockCBC (LTEMP); Blowfish.longtobytearray (ltemp, buffer, ni); }} public void decrypt (byte buffer []) {int nlen = buffer.length; for (int ni = 0; ni <nlen; ni += 8) {long ltemp = blowfish.bytearraytolong (buffer, ni); ltemp = decryptblockcbc (ltemp); Blowfish.longtobytearray (ltemp, buffer, ni); }} long m_lcbciv; public blowfishcbc (byte bfkey []) {super (bfkey); setcbciv (0L); } public blowfishcbc (byte bfkey [], longo linitcbciv) {super (bfkey); setcbciv (linitcbciv); } public blowfishcbc (byte bfkey [], byte initcbciv []) {super (bfkey); setcbciv (initcbciv); }} classe estática privada blowfishecb {public void Cleanup () {for (int ni = 0; ni <18; ni ++) {m_pbox [ni] = 0; } para (int ni = 0; ni <256; ni ++) {m_sbox1 [ni] = m_sbox2 [ni] = m_sbox3 [ni] = m_sbox4 [ni] = 0; }} Long EncryptBlock protegido (LPLAinBlock longo) {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]; Retornar Blowfish.makelong (NHI, NLO ^ PBox [17]); } DecryptBlock longo protegido (LCIPERBLOCK longo) {int nhi = blowfish.longhi32 (Lcipherblock); 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]; retornar blowfish.makelong (NHI, nLO ^ m_pbox [0]); } int m_pbox []; int m_sbox1 []; int m_sbox2 []; int m_sbox3 []; int m_sbox4 []; Final estático int pBox_init [] = {0x243f6a88, 0x85a308d3, 0x13198a2e, 0x3707344, 0XA4093822, 0x299f31d0, 0x82efa98, 0xec422, 0x38d01377, 0xBe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x916d5d9, 0x8979fb1b}; estático final int sbox_init_1 [] = {0xd1310Ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xBa7c9045, 0xf127f. 0x801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0XA458fea3, 0xf4933d7e, 0xd95748f, 0x72858, 0x718.bcd988, 0x72858, 0xd5882, 0x7333d7e, 0xd9578f, 0x7258, 0xc25a59b5, 0x9c30d539, 0x2af26013, 0xc5d1b023, 0x286085f0, 0xCA417918, 0xb8db38ef, 0x8e79cb0, 0x603a180e 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0XA15486AF, 0x7C72E993, 0xB3EE1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xaf6, 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0xf6d6ff3, 0x83f44239, 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960Fa728, 0xab5133a3, 0x68, 0x7EFB2A98, 0XA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b5eBeBeBeBeBeBeBeBeBeBeBeBeBeBeBeBeBeB4, 0x84a5c3, 0x456f9fb4, 0x7a5c3, 0x45eBeBeBE, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x75372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x4c006Ba, 0xc1a94fb6, 0x409f6064c006Ba, 0xc1a94fb6, 0x409f6064c006Ba, 0xc1a94fb6, 0x409f60606Ba, 0x5e, 0xc1a94fb6, 0x409f60606Ba, 0x5e, 0xc1a94fb6, 0x409f60606ba. 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5f09, 0xBee3D004, 0XDEsDE3DE3D30D3, 0xc814544, 0xaf53, 0xBee3D004De3D3D3D3D3, 0xC814544, 0xf5d309, 0xcc814544, 0xAf5D3. 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, 0x6a100c6, 0x4027279, 0x88e9f8, 0xdb3222f8, 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0xfd238760, 0x53317b48, 0xfd238760, 0x53317b48, 0xFD238760. 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x65b27b0, 0xbBCA588C8, 0X10FA3D98, 0XFD2183B8, 0X4AFCB56C, 0X2DD1D35B, 0X9A53E479, 0XB6F84565, 0XDF2DA49BC, 0X4BFB9790, 0XDDF2DA, 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0XAFC725E0, 0X8E3C5B2F, 0X8E7594B7, 0X8FF6E2FB, 0XF2122B64, 0X8888B812, 0X900DF01C, 0X4FAD5EAGER, 0x688F31C, 0x1C, 0x4ffad5ffffffffffffad, 0813, 0x900df01c, 0x4fad5ffffffff. 0x2f2218, 0xBe0E1777, 0XEA752DFE, 0x8B021FA1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13d6, 0xce89e299, 0xb4a84fe0, 0xfd13d6, 0xce89e299, 0xb4a84fe0, 0xfd13d6, 0xce89e299, 0xb4a84fe0, 0xfd13d6, 0xCE899, 0xb4a84fe0, 0xF3D6, 0xd2ada8d9, 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, 0XD6411BD3, 0XAE1E7E49, 0x250E2D, 0x2071B35E, 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x559dfla, 0xd95a537f, 0x207d5ba2, 0x2e5b9c5, 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xB15151513513513513513513513, 0x1513513513513513513513513, 0xbra, 0x4a94a41, 0xb315151513513, 0x1513513513513513513, 0xB1513513513513513, 0xB1515151315151513, 0xB15151515151513, 0xba9, 0xb. 0xd60f573f, 0xbc9b6e4, 0x2b60a476, 0x81e67400, 0x8ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xA99f8fa1, 0x8Ba4799, 0x6e85076a}; static final int sbox_init_2[] = { 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19e1, 0x193602a5, 0x75094c29, 0xA0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65e, 0x34989a, 0x59d65d65, 0x34989a, 0x59365, 0x591340, 0x59365, 0x5989a, 0x59341, 0x591340, 0x991340, 0x591340, 0x591340, 0x591340, 0x591340, 0x59891, 0x753d, 0x35d65d, 0x35913.d. 0XA1D29C07, 0XEFE830F5, 0X4D2D38E6, 0XF0255DC1, 0X4CDD2086, 0X8470EB26, 0X6382E9C6, 0X21ECC5E, 0x96866B3F, 0x21C699, 0x9699, 0x81C59, 0x81C5999, 0x8470eB26, 0x6382e9C6, 0x21ECC5E, 0x96866b3f, 0x3821, 0x81C59, 0x969, 0x81C299, 0x847999, 0x81C299, 0x8470eB26, 0x6382e9C6. 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0xe7d44ec, 0x5716F28, 0xf01c1f04, 0x200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x222f9, 0x72f6, 0x94324773. 0x37c2dadc, 0xc8b57634, 0x9af3dda7, 0xa9446146, 0xfd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcf89af, 0xde9777112, 0xbc99f, 0xde97712, 0xbc99f, 0xde97712, 0xbc993, 0xDe97712, 0xbc99f, 0xde97712, 0xbc99f, 0xde97712, 0x24977c79, 0x5679b072, 0xbcf89af, 0xde977712, 0xbc993. 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408Da17, 0xEC9F9ABC, 0xE94B7D8CCC, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2Ba16, 0x12a14d43, 0x2a65451, 0x50940002, 0x13333313133313, 0x50133333, 0x24cf24dfff, 0x1333333, 0x24c24cfffff11333333, 0x24c24cffffffffffffffffff8133, 0x213333, 0x24c2b2Ba16, 0x13333, 0x24C2B2BA16. 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x43556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, 0xf28fed, 0x97f1f1fbfA, 0x999, 0xf28fed, 0x97f1f1fbfA, 0x999, 0xf28fed, 0x97f1f1FBFA, 0x999, 0xf28fed. 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0XeAC31F66, 0XE3BC4595, 0XA67BC883, 0XB17F37D1, 0X18CFF28, 0XC332DDEF, 0XBE6C5AA5, 0x655582185, 0x6888888888. 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13fe, 0xEB61BD96, 0x13, 0x6333, 0xCa830, 0x6333, 0xCa830, 0x6333, 0xCa830, 0x6333, 0xecdD4775, 0x619f1510, 0x13e, 0xEB61B61BD96, 0x. 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcBaade14, 0xEecc86bc, 0x60622Ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x919bd, 0xb2f3846e, 0x648B1AF. 0x655Abb50, 0x40685a32, 0x3c2ab4b3, 0x319e9d5, 0xc021b8f7, 0x9b540b19, 0x875Fa099, 0x9997e, 0x67Da8, 0x11ed935f, 0x16681281, 0xe358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0XEE7C3C73, 0x5D4A14D9, 0XE84B7E3, 0x4210110110110110110110110110110110130110110130110110110110110110110110110110110110110110110110110, 0xE81110110, 0xFe210110110110, 0xE713110, 0xE210. 0x45EE2B6, 0XA3AAABEA, 0XDB6C4F15, 0XFACB4FD0, 0XC742F442, 0XEF6ABBB5, 0X654F3B1D, 0X41CD2105, 0XD81E79E, 0x86666666665, 0x3d816250, 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x4848a0b, 0x5692b285, 0x1462b174, 0x23820e00, 0x58428d2a, 0xc55f5ea, 0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x8d937e41, 0xd65fecf1. 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xA6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa96a7aa, 0xc506c222, 0xA. 0x9e447a2e, 0xc3453484, 0xfdd56705, 0xe1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xE3674340, 0xc54465, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7}; Final estático int sbox_init_3 [] = {0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a2102d434343434201020202, 0xbcf46420f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a2e. 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96B591AF, 0xbfbc09ec, 0x3bd9785, 0x7fac6dd0, 0x31cb8504, 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0xa2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xE887ad8c, 0xb58ce006, 0x7af4d6b6, 0xAACE1E7, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, 0x1dc9FAF7, 0x4b6d1856, 0x26a36631, 0x4b6d1856, 0x26a36631, 0x4b6d1856, 0x26a36631, 0x4b676, 0x131313131, 0x1aff7, 0x4b667, 0x26a313131, 0x131, 0x1AF7, 0x4B1241, 0x13131, 0x1AF7, 0x4B1241, 0x1aF7F7. 0xdd5b4332, 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xBa489527, 0x55533a, 0x20838d87, 0x5Fe. 0x55a867bc, 0xa1159a58, 0xcCA92963, 0x99e1db33, 0XA62A4A56, 0x3f3125f9, 0x55F47E1C, 0x9029317c, 0xfdf8e8e8e802, 0xfdf8e802, 0xfdf8e802, 0xfdf8e802, 0xfdf8e802, 0x3F3F9202, 0xfdf8e802, 0xfdf8e802, 0xfdf8e802, 0xfdf8e802, 0xfdf8e802, 0xfdf8e802, 0xfdf8e8020. 0x5282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, 0x7f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0xe12b4c2, 0x2e1329e, 0xAF664fd1, 0x5c2, 0x2e1329e, 0xAf664fd1, 0xd12b4c2, 0x2e1329e, 0xAF664fd1, 0x5c2, 0x2e329e, 0xAF664fd1, 0x5c2, 0x29e, 0xAX6B6b12, 0xED1b4C2, 0x136b6b6b1b1b4c2, 0x136b6b6b, 0xE12b4c2, 0x1329e, 0xAf64fd12b4c2, 0x29e. 0x333e92e1, 0x3b240b62, 0xeeBeB922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2Da2f728, 0xd0127845, 0x95b794fdddddddd728. 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0XA476341, 0x992F74, 0x3a6f6eab, 0xf4f8fd37, 0XA812DC60, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0XA091CF0B, 0XD91555EA3, 0XBB132F88, 0X515BAD24, 0X7B9479BF, 0X763BD6EB, 0X37392EB3, 0XC115979, 0x8026E297, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, 0x6a124237, 0xb79251e7, 0x6a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11CaEDFA, 0x3d2550, 0x1a6b18, 0x4bfb6550, 0x15, 0x43d255, 0x1a. 0x44421659, 0XA121386, 0xd90Cec6E, 0xd5ABea2a, 0x64af674e, 0xda86a85f, 0xBeBFE988, 0x64E4C3fe, 0x9dbc8057, 0xf988. 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745e04, 0xd736fcc, 0x83426b33, 0xf01eaB71, 0xb0804187, 0x355e5f01eaB71, 0x0804187, 0x355e5F01eAb71, 0x0804187, 0x355e5f01eaB71. 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb47f252525, 0x7EB2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902DE4C, 0xb90bace11, 0xb90bace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0xbace1, 0x20B45770, 0xbace11. 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x9f0Be8C, 0x4a99a025, 0x1D6EFE10, 0x9F0BE8C, 0x4a99a025, 0x1D6EFE10 0XA186F20F, 0X2868F169, 0XDCB7DA83, 0X573906FE, 0XA1E2CE9B, 0X4FCD7F52, 0X50115E01, 0XA706DAFA, 0XA0022B54CDE01, 0XA7063FA, 0XA0022B54, 08101, 0823232020101, 0x50115e01, 0xA7063FAffA, 0852232020101, 0x50115e01, 0xA7063FA, 0852320201, 0x5015e01, 0xa7063fAffAffAff52, 0x50115e01, 0xA7063FAF, 0x50115e01. 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x6058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7DA1, 0xce591d76, 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x727c24, 0x86e37725f, 0x72724, 0x86725f, 0x727924, 0x865, 0xd39eb8fc, 0xed545578, 0x8fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x61133d, 0x61f8, 0x61F5, 0xb161f8, 0xa28514d9, 0x61133d, 0x61f8, 0x61f8, 0xb16f8, 0xa28514d9, 0x61133d, 0x61f8. 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0}; static final int sbox_init_4[] = { 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x748ab2f, 0xbc946e7e7, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0XA9Ba4650, 0xac9526e8, 0xbe5e304, 0xA1fad5f0, 0x6a2d51d51913, 0xA132913, 0xA13132913, 0xA132913, 0xA2913. 0xc089c2b8, 0x43242ef6, 0xA51e03aa, 0x9cf2d0a4, 0x83c061Ba, 0x9be96a4d, 0x8fe51550, 0xBa645bd6, 0x2826a2f9axa5550, 0xBa645bd6, 0x2826a2f9axa5550, 0xBA645bd6, 0x2826a2f9, 0xBa63. 0XEF5562E9, 0XC72FEFD3, 0XF752F7DA, 0X3F046F69, 0X77FA0A59, 0X80E4A915, 0X87B08601, 0X9B09E6AD, 0X3B3EE593 0x2cf0b7d9, 0x22b8b51, 0x96d5ac3a, 0x17DA67D, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6ad6b472, 0x5555, 0x283d2d28. 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xE8d3c48d, 0x283b57cc, 0xf8d56629, 0x7955, 2, 0xf0191, 0x7955, 0xf0195, 0x7955, 0xf01f01f, 0x7555, 0xf8d51f, 0x7555, 0xf8d51f, 0x7955, 0xf8d51f, 0x7955, 0xf8d51f, 0x7555, 0xf8d51f, 0x7555, 0xf8d51f, 0x7955, 0xf8d51f, 0x7555, 0x15056dd4, 0x88f46dba, 0x3a16125, 0x564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xA9a072a, 0x1b3f6d9b, 0xa936663, 0x972727131313, 0x972713131313131313, 0x92713131313131313, 0x92711313, 0x9713131313131313, 0x9721313131313, 0x9271313131313313, 0x972313131313131313, 0x927151331313131313, 0x97bd. 0x26dcf319, 0x7533d928, 0xb155fdf5, 0x3563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fBE32, 0XA8B6E37E, 0xc393d46, 0x48de5369, 0xc393d46, 0x48de5369, 0xc393d46, 0x48de569, 0xdd6db224, 0x69852dfd, 0x9072166, 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5BBEDDD, 0x1B588D40, 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eCea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, 0xd29Be463, 0x55454545423, 0x23, 0xbf3d484bb, 0x8d6612e, 0xbf3c6f47, 0xd29Be463, 0x55454545. 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x115AF84 0x6b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520Ab82, 0x11a1d4b, 0x277227f8, 0x611560b1, 0xE79333fdc, 0xbb3a792b, 0x3442, 0xe7933333333333333333333333333333272, 0xbb3a792b1, 0xe79333fdc, 0xbb3a792b1. 0x51CE794B, 0x2F32C9B7, 0XA01FBAC9, 0XE01CC87E, 0XBCC7D1F6, 0XCF0111C3, 0XA1E8AAC7, 0X1ATELAD 0x339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0xf91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xE3056a0c, 0x10d25065, 0xcb033a442, 0xE30c, 0x10d25065, 0xcb033a442, 0xEspe 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, 0x1b0a7441, 0x4Ba3348c, 0xB5Be 0x9b992f2e, 0xe60b6f47, 0xfe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d3e7e6f, 0x1618b166, 0xf523f357, 0xA6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 0xde9666296297, 0x88d273cc, 0xde9666296297, 0x8873cc, 0xde966296297, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xb25bffe, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xBa38209c, 0xf746ce76, 0x2577Ad, 0x85cbfe4e, 0x8e88dd8, 0x7aAF9b0, 0x4cf9aa7e, 0x1948c25c, 0x2fb8a8c, 0x1c36ae4, 0xd6eBe1f9, 0x90d4f869, 0xaa4, 0xd6eBe1f9, 0x90d4f869, 0xaa4, 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 = new int [256]; m_sbox3 = new int [256]; m_sbox4 = new 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] e 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); } para (int ni = 0; ni <256; ni += 2) {lZero = EncryptBlock (lZero); m_sbox1 [ni] = (int) (lZero >>> 32); m_sbox1 [ni + 1] = (int) (lZero & 0xfffffffffl); } para (int ni = 0; ni <256; ni += 2) {lZero = EncryptBlock (lZero); m_sbox2 [ni] = (int) (lZero >>> 32); m_sbox2 [ni + 1] = (int) (lZero & 0xfffffffffl); } para (int ni = 0; ni <256; ni += 2) {lZero = EncryptBlock (lZero); m_sbox3 [ni] = (int) (lZero >>> 32); m_sbox3 [ni + 1] = (int) (lZero & 0xffffffffffl); } para (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 (senha da string) {Messagedigest Digest = null; tente {Digest = MessAgedigest.getInstance ("sha1"); Digest.Update (senha.getBytes ()); } catch (Exceção e) {log.error (e.getMessage (), e); } m_bfish = new Blowfishcbc (diger.digest (), 0l); Digest.Reset (); } public string EncryptString (string splaIntext) {long lcbciv; sincronizado (m_rndgen) {lcbciv = m_rndgen.nextlong (); } retornar o ENCSTR (SPLAINTEXT, LCBCIV); } private string ENCSTR (String spLaintext, Long Lnewcbciv) {int nstrlen = spLaintext.length (); byte buf [] = novo byte [(NStrlen << 1 & -8) + 8]; int nposs = 0; for (int ni = 0; ni <nstlen; ni ++) {char cactchar = splainText.Charat (ni); BUF [npos ++] = (byte) (cactchar >> 8 e 0xff); BUF [npos ++] = (byte) (cactchar & 0xff); } byte bpadVal = (byte) (buf.length - (NStrlen << 1)); while (npos <buf.length) {buf [npos ++] = bpadval; } m_bfish.setcbciv (lnewcbciv); m_bfish.encrypt (buf); byte newcbciv [] = novo byte [8]; longTobyteArray (lnewcbciv, newcbciv, 0); retornar 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 [] = novo byte [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 [] = novo byte [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 estático longo bytearraytolong (buffer de byte [], int nstartIndex) {return (long) buffer [nstartIndex] << 56 | (Buffer [NStartIndex + 1] e 255L) << 48 | (Buffer [NSTARTIndex + 2] e 255L) << 40 | (Buffer [NStartIndex + 3] e 255L) << 32 | (Buffer [NStartIndex + 4] e 255L) << 24 | (Buffer [NStartIndex + 5] e 255L) << 16 | (Buffer [NStartIndex + 3] e 255L) << 32 | (Buffer [NStartIndex + 4] e 255L) << 24 | (Buffer [NStartIndex + 5] e 255L) << 16 | (Buffer [NStartIndex + 6] e 255L) << 8 | buffer [nstartIndex + 7] e 255L; } private estático void longTobyteArray (LVALUE LONG, buffer de byte [], int nstartIndex) {buffer [nstartIndex] = (byte) (int) (lValue >>> 56); buffer [NSTARTIndex + 1] = (byte) (int) (lValue >>> 48 e 255L); buffer [nstartIndex + 2] = (byte) (int) (lValue >>> 40 e 255L); buffer [nstartIndex + 3] = (byte) (int) (lValue >>> 32 e 255L); buffer [nstartIndex + 4] = (byte) (int) (lValue >>> 24 e 255L); buffer [nstartIndex + 5] = (byte) (int) (lValue >>> 16 e 255L); buffer [NSTARTIndex + 6] = (byte) (int) (lValue >>> 8 e 255L); buffer [nstartIndex + 7] = (byte) (int) lValue; } private estático Long Makelong (int nlo, int nhi) {return (longo) nhi << 32 | NLO & 0xfffffffffl; } private static int longlo32 (long lval) {return (int) lVal; } private static int Longhi32 (Long LVal) {return (int) (lVal >>> 32); } String estática privada bytestobinhex (dados de byte [], int nstartPos, int nnumofbytes) {StringBuffer sbuf = new StringBuffer (); sbuf.setLength (nnumofbytes << 1); int nposs = 0; for (int ni = 0; ni <nnumofbytes; ni ++) {sbuf.setcharat (npos ++, hextab [dados [ni+nstartpos] >> 4 & 0xf]); sbuf.setcharat (npos ++, hextab [dados [ni+nstartpos] e 0xf]); } retornar sbuf.toString (); } private static int binhextobytes (String sbinhex, byte dados [], 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; Boolean 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; continuar; } 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 ++; }} retornar NRESULT; } string estática privada byteArrayTouncString (byte dados [], 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; para (; nnumofbytes> 0; nnumofbytes -= 2) {sbuf.setcharat (nsbufpos ++, (char) (dados [nstartpos] << 8 | dados [nstartpos+1] & 0xff)); NSTARTPOS += 2; } retornar sbuf.toString (); } Private Blowfishcbc m_bfish; M_RNDGEN ALAPACIONAL PRIVADO PRIVADO = NOVA ALEMANHA (); estático final char hextab [] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};};Resumir
O exposto acima é todo o conteúdo deste artigo sobre a implementação do código completo do algoritmo de criptografia Blowfish no idioma Java. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la.