Criptografar um hash usando RSA

1

Eu tenho que criptografar um hash, por exemplo:

2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2

usando o algoritmo RSA usando uma chave pública (por exemplo: mykey.key ) que já foi fornecida para mim. Como faço para fazer isso? Vejo sites que me dizem para usar openssl , mas não sei como fazer isso.

Alguém pode me ajudar?

EDIT: eu tentei fazer isso

Eu criei um arquivo e empurrei o hash nele fazendo isso

echo "2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2" >file.txt

seguido por este

openssl rsautl -inkey mykey.key -pubin -encrypt -in file.txt > file.txt.enc

quando eu tentei abrir file.txt.enc no bloco de notas, eu tenho isso:

saída de texto cifrado http://i62.tinypic.com/imrmoh.png

Não tenho certeza se essa é uma criptografia bem-sucedida, pois preciso do resultado do texto cifrado no formato binário.

    
por Jeevan Daniel Mahtani 30.09.2015 / 16:44

3 respostas

0

Tente:

$ cat file.txt | openssl rsautl -encrypt -pubin -inkey mykey.key > secret.txt
cat secret.txt
}[4�Or)f���r�_
# more binary data here...

e depois:

$ cat secret.txt | openssl rsautl -decrypt -inkey myprivatekey.key
2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2

As duas chaves devem estar no formato PEM.

    
por 30.09.2015 / 18:06
1

Not sure if this is a successful encryption as i need the ciphertext result in binary format.

Bem, se você realmente quiser testar se a criptografia é bem-sucedida, tente descriptografá-la imediatamente e veja se recuperou seu texto simples. Se você pegar seu texto simples de volta, você é bom.

Eu acho que você está confuso sobre o que "formato binário" realmente significa.

Isto:

2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2

é na verdade um formato textual hex - uma representação de texto de um valor binário.

Qualquer arquivo ou porção de dados em um sistema é basicamente uma série de bytes - e um byte é (para simplificar, não se preocupe com bits ainda) simplesmente um número do intervalo 0 a 255. Você pode escrever ou exibir um byte como um número decimal, um número hexadecimal, um número binário ou qualquer coisa exigida pelo aplicativo que processa os bytes.

Existem vários esquemas para representar o texto como números, UTF-8, Unicode, etc.

Para ilustrar, a seqüência de texto "2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2" é a seguinte quando convertida em bytes (mostrada em decimal):

 50  99  49  52  48  48 102  54  57  56  54  55  53  55  49  97
 98  52 101  54  48 100  51  98  56 102  48  49 101  48  98  49
 55  99  55  98 101  56  57 101  51  50  49 102  57  49 102  56
 97  48  55  99 100  51  57 101 101  98  97  50  48  50 101  50

mais uma nova linha. Um total de 65 bytes, 130 se a sua localidade usar caracteres de 16 bits, por ex. Unicode Unicode será os mesmos valores acima, exceto com um 0 na frente de cada valor. Não é equivalente ao valor que o texto representa, obviamente.

Assim, a série de bytes acima é o que você disse a openssl para realmente criptografar, não o valor real "2c1400f69867571ab4e60d3b8f01e0b17c7be89e321f91f8a07cd39eeba202e2" (que seria um número decimal insanamente longo).

Portanto, com base no acima, seu file.txt.enc provavelmente consiste em 65 ou 130 valores aleatórios. É o que o Bloco de Notas está tentando processar.

Agora, se você quiser a representação hexadecimal texto do conteúdo de seu file.txt.enc - acho que isso funcionará (com base em this ):

xxd -p file | tr -d '\n'

    
por 30.09.2015 / 17:58
0

Você encontrará as respostas para muitas das suas perguntas (com exemplos) aqui:

https://www.madboa.com/geek/openssl/

Em particular, se você estiver enviando o resultado criptografado de seu procedimento via e-mail, você pode querer codificá-lo com base em 64 usando a opção '-a' no subcomando 'enc', ou como uma etapa separada, a 'base64' subcomando openssl.

Isso produzirá um resultado que é um texto ASCII em vez de um arquivo binário de bytes não imprimíveis.

Eu sugiro que você verifique sua criptografia antes de tudo, crie seu próprio arquivo de chave RSA (teste) (também usando o openssl, veja o link acima), e então tente a 'viagem de ida e volta' da codificação- (base64) descodificação decodificada.

Se o seu resultado usando sua própria chave de teste RSA (par) for o mesmo que você colocou, então é razoável dizer que pelo menos você tem a mecânica toda correta.

Você pode então tentar enviar algum outro texto para o destinatário pretendido usando o arquivo de chave RSA fornecido para verificar se tudo está correto, antes de enviar seus dados "reais" - o que espero não é o mesmo como você digitou sua pergunta! (a menos que você esteja apenas usando criptografia para autenticação).

    
por 30.09.2015 / 17:57