Estou com problemas ao utilizar o OPENSSL, preciso criptografar um arquivo e depois descriptografá-lo. Aparece a seguinte mensagem de erro:
----EXECUTANDO O OPENSSL…---------------
Loading ‘screen’ into random state - done
RSA operation error
740:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:./crypto/rsa/rsa_pk1.c:151:
Process exitValue: 1
-PROCESSO TERNINADO…----------------------------------
Abaixo contém o código que estou executando o comando:
Amigo, se o arquivo tiver mais de 120 bytes mais ou menos, não é possível criptografá-lo com uma chave de 1024 bits (128 bytes).
Isso é esperado.
Em vez disso, é necessário usar a opção smime (obviamente você precisa ter um certificado, não somente uma chave privada).
Executei os comandos que você passou, e para um arquivo bem pequeno eles funcionam direitinho.
R
ricardoluizv
Eu criei um arquivo .txt e nele escrevi “EMULADOR” . O erro acima é correspondente a essa palavra, eu preciso apenas criptografar uma pavra de no máximo 23 dígitos…
E
entanglement
a) Você viu o tamanho exato do arquivo de entrada?
b) Você já experimentou digitar os mesmos comandos em uma linha de comando, para ver se funcionam? Eu digitei seus comandos e parece que funcionaram. Por favor, confira se fiz exatamente os mesmos comandos.
No arquivo teste.txt está apenas e tão somente a palavra-chave “EMULADOR”.
R
ricardoluizv
Vlw kra, seu comando está correto pois fiz toda a rotina e funcionou no prompt de comando, mas no java nem a pau, abaixo eu tenho o método que se comunica com o openssl ele pode conter algum erro:
privatevoidexecOpenssl()throwsException{rt=Runtime.getRuntime();System.out.println("----EXECUTANDO O OPENSSL...---------------");InputStreamstderr=comando.getErrorStream();InputStreamReaderisr=newInputStreamReader(stderr);BufferedReaderbr=newBufferedReader(isr);Stringline=null;System.out.println("<ERROR>");while((line=br.readLine())!=null)System.out.println(line);System.out.println("</ERROR>");intexitVal=comando.waitFor();System.out.println("Process exitValue: "+exitVal);System.out.println("-PROCESSO TERNINADO...----------------------------------");}
Essa eu não entendi o mesmo código funcionar no prompt mas não funcionar no JAVA?
E
entanglement
Dica: “nomeArquivo” pode estar apontando para o arquivo errado (talvez um arquivo maior, que você usou para testar). Cuidado ao especificar comandos com a versão padrão do Runtime.exec (que aceita uma linha de comando gigante). Use a versão do Runtime.exec que aceita um array com o comando todo “quebrado” em partes, porque essa versão leva em conta a necessidade de pôr aspas em volta de nomes de arquivos com espaços, por exemplo.
R
ricardoluizv
Eu mandei executar pondo o nome do arquivo direto assim como mostra o exemplo abaixo:
Loading ‘screen’ into random state - done
RSA operation error
4080:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:./crypto/rsa/rsa_pk1.c:151:
Process exitValue: 1
-PROCESSO TERNINADO…----------------------------------
Não sei o que pode estar havendo…
E
entanglement
Só para ser bem chatinho. Qual é o tamanho exato, em bytes, do arquivo “c:\numeroSerie.txt” ? Quero ver a saída do comando “dir”. (Assim como eu postei a saída do comando “dir” de meu teste).
R
ricardoluizv
Para fechar esse tópico como tutorial, apenas troquei o nome do arquivo a ser criptografado ao invés de numeroSerie.txt mudei para numero_serie.txt… Agora está funcionando corretamente.
Para não te contrariar abaixo tem o tamanho do arquivo: