Existe um programa open source que é o openp2m, o programa tem por finalidade compartilhar arquivos por e-mails (e é muito bom). Parando com a propaganda, eu estava olhando o código fonte do programa e vi que tem a função descriptografar e decidi fazer uma gambiarra que implementava aquela função pra descriptografar uma senha. Mas vejam só! no código fonte está sendo declarado uma variável do tipo BigInteger e como paramêtro uma String = “CHAVE”. Achei isso estranho mas mesmo assim fui testar o código, e como esperado da erro nessa parte! Mas como pode o programa funcionar ao baixar via JNLP? Alguém tem ideia?
Se a classe for java.lang.BigInteger e receber a string “CHAVE”, vai dar zinabre mesmo…
Mas se for uma classe proprietaria com o nome de BigInteger, ai o cara faz mágica lá dentro…
ViniGodoy
Eles devem ter retirado a chave dos fontes.
Você não achou que eles publicariam a chave interna deles, achou?
T
thingol
Provavelmente, se você olhar os fontes ou a documentação vai aprender como é que se gera a tal chave.
Dá a impressão que precisa de um processo um pouco complexo, já que o nome da classe é RSA e provavelmente o tal número é uma chave privada, que deve ser gerada por um processo especial (não dá para simplesmente espetar qualquer número lá.)
ivo_costa
mas pelo o que eu vi (baixei todo o códifo fonte via CVS) ele não faz nada por baixo dos panos com a variável BIgInteger, e eu acho que não tem pra que ele esconder a chave poq é opensource.
Quando eu achar o e-mail desse cara vou perguntar pra ele e posto aqui o segredo da mágica.
publicclassRSA{publicfinalStringencriptar(Stringoriginal){try{BigIntegernumero=newBigInteger(original.getBytes("ISO-8859-1"));BigIntegerencriptado=this.encrypt(numero);StringstrEncriptado="_"+encriptado.toString(36);returnstrEncriptado;}catch(UnsupportedEncodingExceptionex){returnex.getMessage();}}publicfinalStringdesencriptar(StringsenhaEncriptada)throwsNumberFormatException{Stringdesencriptado;if(senhaEncriptada.startsWith("_"))desencriptado=newString(this.decrypt(newBigInteger(senhaEncriptada.substring(1),36)).toByteArray());elseif(senhaEncriptada.startsWith("+"))desencriptado=newString(this.decrypt(newBigInteger(senhaEncriptada.substring(1),36)).toByteArray());elsedesencriptado=newString(this.decrypt(newBigInteger(senhaEncriptada)).toByteArray());returndesencriptado;}privateBigIntegerpublicKey,privateKey,e;publicRSA(intbitlen){SecureRandomr=newSecureRandom();BigIntegerp=newBigInteger(bitlen/2,100,r);BigIntegerq=newBigInteger(bitlen/2,100,r);publicKey=p.multiply(q);BigIntegerm=(p.subtract(BigInteger.ONE)).multiply(q.subtract(BigInteger.ONE));e=newBigInteger("3");while(m.gcd(e).intValue()>1)e=e.add(newBigInteger("2"));privateKey=e.modInverse(m);}publicRSA(BigIntegere,BigIntegerprivateKey,BigIntegerpublicKey){this.e=e;this.privateKey=privateKey;this.publicKey=publicKey;}publicRSA(BigIntegerprivateKey){this.e=newBigInteger("5");this.privateKey=privateKey;this.publicKey=newBigInteger("8496133897567932221559267089164065267221377078566337104866771208480189113695076911576868324903413008512741498700587851315525414979963642608998181269527941");}publicRSA(){this.e=newBigInteger("5");this.privateKey=null;this.publicKey=newBigInteger("8496133897567932221559267089164065267221377078566337104866771208480189113695076911576868324903413008512741498700587851315525414979963642608998181269527941");}privatefinalBigIntegerencrypt(BigIntegermessage){returnmessage.modPow(e,publicKey);}privatefinalBigIntegerdecrypt(BigIntegermessage){if(privateKey==null)MessagesGUI.displayErrorMessage("You shouldn't be seen this, please report it on openp2m page");returnmessage.modPow(privateKey,publicKey);}}
O que o código do Glauber chama de “chave privada” provavelmente é o “expoente privado”, e o que é chamado de “chave pública” é provavelmente o “módulo”.
ivo_costa
Eu também acho que é isso, mas e o new BigInteger(“CHAVE”)?
Saudações vi o vosso post e recentemente encotrei o codigo fonte do openp2m e decidir ver como era uma vez que o uso com frequencia.
A mesma duvida surgiu.
Procurei um pouco e encontrei esta classe que supostamente decripta a chave do open mas nao percebo como a posso por a funcionar.
Se quiserem dar uma ajuda agradecia, percebo alguma coisa de java mas nada de algoritmos de encriptação ainda mais este, pelo vi durante a minha pesquisa este meio estranho.
Bem aqui vai a classe para voces verem se podem dar uma ajuda.