Rsa_sign ou dsa_sign no php!
Pergunta
Vou implementar o gerador de chaves de licença no meu site, mas tenho muito poucos conhecimentos do PHP! No meu aplicativo (cacau), integra uma verificação do sistema que usa a função RSA_SIGN (em C#) ... gostaria de usar o sistema de notificação do PayPal IPN para gerar e enviar automaticamente aos meus usuários suas chaves de licença ... mas Eu realmente não sei como assinar uma string no PHP usando uma chave RSA !!! No PHP, sei apenas a função OpenSS_Sign, mas não é a mesma coisa! Ou é melhor e mais fácil usar um método de assinatura da DSA ???
Por favor ajude!
Agradecemos antecipadamente por todas as respostas !!!
Solução
Você quer OpenSSL_Sign ().
EDITAR:
- Verifique se o resumo da mensagem é o que você deseja usar para verificar.
- Não teste -o comparando a saída BASE64 com outra assinatura, teste -a verificando a assinatura no seu código C#. Acredito que seja possível para duas assinaturas válidas com a mesma chave dos mesmos dados para ter diferentes representações binárias.
Outras dicas
Obrigada! Você está certo!
Eu encontrei o problema, está na string hash que eu uso com o OpenSSL_Sign! Eu tenho esse código no Objective-C:
NSString *stringToEncript = @"test";
const char *clearText = [stringToEncript UTF8String];
unsigned char md[SHA_DIGEST_LENGTH];
SHA1((unsigned char *)clearText, strlen(clearText), md);
for(int i=0; i<SHA_DIGEST_LENGTH; i++)
printf("%x", md[i]);
E no PHP que escrevi:
$stringToEncrypt = "test";
$hash = sha1(utf8_encode($stringToEncrypt));
echo $hash;
A saída do primeiro código é:
A94A8FE5CCB19BA61C4C873D391E987982FBBD3
A saída do segundo código é:
A94A8FE5CCB19BA61C4C0873D391E987982FBBD3
Como você pode ver, há um '0' perdido! O que eu estou errado?