O estado obrigou as empresas portuguesas terem os documentos com a assinatura criptada.
Usando o RSA.
Geramos a chave privada:
C:\openssl genrsa -out ChavePrivada.pem 1024
E depois geramos a chave publica:
C.\openssl rsa -in ChavePrivada.pem -out ChavePublica.pem -outform PEM -pubout
Eu renomei-o o ficheiro ChavePublica.pem para ChavePublica.txt porque o estado quer em TXT.
O estado portugues tem uma aplicação que verifica se as assinaturas dos documentos estão correctos.
Chamo a aplicação de validação dos documentos criado pelo estado e indico o caminho da chave publica TXT e
valida todas as assinaturas muito rapido.
Estou a tentar a criar um validador em java e que eu internamente
digo que a chave publica está em ‘C:\Chavepublica.txt’ e com ela validar os documentos assinados.
Mas estou a ter imensas dificuldades por isso se alguém ajudar fico feliz!
Apenas pretendo fazer verificação da assinatura de um documento.
importjava.io.File;importjava.io.IOException;importjava.security.PublicKey;importjava.io.FileInputStream;importjava.security.Signature;importjava.io.DataInputStream;importjava.security.PrivateKey;importjava.security.KeyFactory;importjava.security.SignatureException;importjava.security.InvalidKeyException;importjava.security.spec.X509EncodedKeySpec;importjava.security.spec.PKCS8EncodedKeySpec;importjava.security.NoSuchAlgorithmException;//import java.security.spec.InvalidKeySpecException;publicclassNovoVer{publicstaticStringverifySignature(Stringname)throwsException{Filef=newFile("d:/Chave_Publica.txt");FileInputStreamfis;fis=newFileInputStream("d:/Chave_Publica.txt");DataInputStreamdis=newDataInputStream(fis);byte[]keyBytes=newbyte[(int)f.length()];dis.readFully(keyBytes);dis.close();//nao sei se é o correcto....X509EncodedKeySpecpubKeySpec=newX509EncodedKeySpec(keyBytes);KeyFactorykeyFactory=KeyFactory.getInstance("RSA");// se tenho a chave porque tenho de gerar outra vez?!!!PublicKeypubKey=keyFactory.generatePublic(pubKeySpec);Signaturesig=Signature.getInstance("SHA1withDSA");//dá erro porque diz que a chave é invalida....sig.initVerify(pubKey);// name é a variavel que tem a assinatura do documento// name="K3gO6WPSuh9lhkVPH/2VE/J+GB4Hr+nItYk0MQn4OcJUjgF8ytbfgV+pnaFJBK4UYWEkeR8voycVhLyvc9yBq3nBq3yGwiYbXhwwMw5jtTx/gBVqJWVWedfvt2JySta/mgdA7DRIZRjQIHDmgFXf7E22ZrIwdeX3VtX+MEnxcmM="byte[]data=name.getBytes();sig.update(data);//return sig.verify(signature);//nao chega aqui... if(sig.verify(sig.sign())){return"Ok";}else{return"Falhou";}}}
não é apropriada para ler um arquivo de chave pública e privada em formato PEM. Você tem de baixar o pacote BouncyCastle, que dá suporte a esse formato.
não é apropriada para ler um arquivo de chave pública e privada em formato PEM. Você tem de baixar o pacote BouncyCastle, que dá suporte a esse formato.
Obrigado, mas gostava de ter uma solução sem ter de adicionar o pacote.