Histórico da Página
Pagetitle | ||||
---|---|---|---|---|
|
Inclusão de trecho | ||||||
---|---|---|---|---|---|---|
|
{composition-setup}
import.css=/download/attachments/6062824/tecnologia.css
{composition-setup}
...
Assina um determinado conteúdo usando chave privada.
...
Sintaxe
...
Bloco de código |
---|
...
|
...
|
...
PrivSignRSA( < cKeyOrPathKey >, < cContent >, < |
...
nType >, < cSenha >, [ @cErrStr ], [ nPad ] ) |
...
|
...
Parâmetros
...
Nome |
---|
...
Tipo |
---|
...
Descrição |
---|
...
Obrigatório |
---|
...
Referência |
---|
...
...
cKeyOrPathKey | character | Indica a string que contém o caminho para a chave privada |
...
(formato .PEM |
...
) ou o conteúdo do arquivo. |
...
X |
...
...
cContent | character | Indica a string que será assinada. |
...
X | ||
nType | numeric | Indica o tipo de algoritmo que será utilizado para realizar a assinatura da chave. |
...
X |
...
...
cSenha | character | Indica uma string que contém o valor da senha usada na geração da chave privada criptografada. |
...
X |
...
...
cErrStr | character | Indica a variável para retornar as mensagens de erro. |
...
X |
...
...
nPad | numeric | Indica o tipo de schema de criptografia que será utilizado. |
...
...
Retorno
...
Nome |
---|
...
Tipo |
---|
...
Descrição |
---|
...
...
cRet | character | Retorna o valor do parâmetro cContent, assinado, de acordo com o tipo |
...
nType e a chave privada informada cPathKey. |
...
{info:title=Observações|icon=true}
...
Observações
Nota | ||||
---|---|---|---|---|
| ||||
A funcionalidade de uso da chave ao invés do path está disponível apenas em versões iguais ou superiores a: 17.3.0.18. |
Aviso | ||||
---|---|---|---|---|
| ||||
Essa função utiliza a chave privada para realizar a assinatura. Para isso, é necessário informar o caminho |
...
(path |
...
) da chave privada |
...
(formato .PEM |
...
), ou seu conteúdo, no parâmetro |
...
cKeyOrPathKey e, em seguida, o |
...
Hash Criptoráfico cHash que se deseja assinar e |
...
o tipo de |
...
Hash Criptográfico informado. O Hash Criptográfico a ser assinado deve ser gerado sobre o conteúdo antes de chamar esta função. |
O arquivo (no formato .PEM) informado no parâmetro cKeyOrPathKey deve ser ou conter uma chave privada, tais como:
...
Chave Privada |
...
...
Certificado |
...
...
CA |
...
(Certificate Authority |
...
) |
...
Tipo de algoritmo válido para o parâmetro
...
nType:
...
Valor |
---|
...
Algoritmo |
---|
...
...
1 |
...
MD5 |
...
...
2 |
...
SHA1 |
...
...
3 |
...
RIPEMD160 |
...
...
4 |
...
MD5_SHA1 |
...
...
5 |
...
SHA256WithRSA |
...
...
6 |
...
SHA256 |
...
Tipo de schema válido para o parâmetro nPad:
...
Valor |
---|
...
Schema |
---|
...
...
1 |
...
PKCS1 |
...
...
2 |
...
SSL |
...
...
3 |
...
NO |
...
...
4 |
...
PKCS1_OAEP |
...
...
5 |
...
X931 |
...
Caso não seja passado nenhum schema de criptografia
...
(nPad
...
), a
...
função assume com padrão o schema 1 - PKCS1.
...
Os valores 5 e 6 no parâmetro
...
nType estão disponíveis em
...
versões superiores a
...
13.2.3.0.
Caso seja informado no parâmetro
...
cKeyOrPathKey um caminho de arquivos no client ou não tenha o conteúdo de uma chave privada, será adicionado ao parâmetro cErrStr a mensagem "
...
[PrivSignRSA
...
] Only server path or private key content are allowed." e retornará Nil
...
h2. Exemplos
{code:language=cpp|linenumbers=true|collapse=false|theme=Eclipse}
User Function RSASignPath()
Local sPrivKeyPath := "private.pem"
Local sStr := "01234567890123456789"
Local cMD5 := ''
Local sSign := ""
// Conteudo a ser assinado
varinfo( "sStr", sStr )
// Hash MD5 gerado a partir desse conteudo
cMD5 := Md5( sStr )
varinfo( "cMD5", cMD5 )
// Assinatura gerada a partir do Hash MD5 usando a chave privada
sSign := PrivSignRSA( sPrivKeyPath, cMD5, 1, "senhachaveprivada" )
varinfo( "sSign", sSign )
Return
User Function RSASignKey()
Local sPrivKey
Local sStr := "01234567890123456789"
Local cMD5 := ''
Local sSign := ""
...
.
Caso seja passado um valor inválido no parâmetro nPad, a função não processará e retornará uma string vazia.
Se forem passados valores inválidos no parâmetro nType, o programa será finalizado com a mensagem de erro fatal "Invalid hash algorithm".
Em caso de erro abrir o arquivo informado no parâmetro cKeyOrPathKey, será adicionado ao parâmetro cErrStr a mensagem "Fail open PEM file.".
Em caso de erro na leitura do arquivo informado no parâmetro cKeyOrPathKey, será adicionado ao parâmetro cErrStr a mensagem "Fail read RSAPrivateKey.".
Se houver erro no processamento da assinatura, será adicionado ao parâmetro cErrStr a mensagem "Fail execute RSA sign.".
A partir da versão 20.3.3.0 o algoritmo SHA256WithRSA (valor 5 de nType) e o schema SSL (valor 2 de nPad) serão inválidos.
Em builds iguais ou superiores a 24.3.0.0 essa função é obsoleta.
Exemplos
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
User Function RSASignPath() Local sPrivKeyPath := "private.pem" Local sStr := "01234567890123456789" Local cMD5 := '' Local sSign := "" // Conteudo a ser assinado varinfo( "sStr", sStr ) // Hash MD5 gerado a partir desse conteudo cMD5 := Md5( sStr ) varinfo( "cMD5", cMD5 ) // Assinatura gerada a partir do Hash MD5 usando a chave privada sSign := PrivSignRSA( sPrivKeyPath, cMD5, 1, "senhachaveprivada" ) varinfo( "sSign", sSign ) Return User Function RSASignKey() Local sPrivKey Local sStr := "01234567890123456789" Local cMD5 := '' Local sSign := "" sPrivKey := "-----BEGIN PRIVATE KEY-----" + chr(10) |
...
sPrivKey += "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJSn+hXW9Zzz9ORB" + chr(10) |
...
sPrivKey += "KIC9Oi6wzM4zhqwHaKW2vZAqjOeLlpUW7zXwyk4tkivwsydPNaWUm+9oDlEAB2ls" + chr(10) |
...
sPrivKey += "QJv7jwWNsF7SGx5R03kenC+cf8Nbxlxwa+Tncjo6uruEsK/Vke244KiSCHP8BOuH" + chr(10) |
...
sPrivKey += "I+r5CS0x9edFLgesoYlPPFoJxTs5AgMBAAECgYBL/6iiO7hr2mjrvMgZMSSqtCaw" + chr(10) |
...
sPrivKey += "kLUcA9mjRs6ZArfwtHNymzwGZqj22ONu5WqiASPbGCO0fI09KfegFQDe/fe6wnpi" + chr(10) |
...
sPrivKey += "rBWtawLoXCZmGrwC+x/3iqbiGJMd7UB3FaZkZOzV5Jhzomc8inSJWMcR+ywiUY37" + chr(10) |
...
sPrivKey += "stfVDqR1sJ/jzZ1OdQJBAO8vCa2OVQBJbzjMvk8Sc0KiuVwnyqMYqVty6vYuufe9" + chr(10) |
...
sPrivKey += "ILJfhwhYzE82wIa9LYg7UK2bPvKyyehuFfqI5oU5lU8CQQCfG5LA3gp3D1mS7xxz" + chr(10) |
...
sPrivKey += "tqJ+cm4SPO4R6YzVybAZKqKUvTFSKNV57Kp/LL7WjtUUNr+dY+aYRlKo81Hq61y8" + chr(10) |
...
sPrivKey += "tBT3AkAjJyak+2ZCxIg0MONHe8603HWhtbdygQ1jA2DFDdkHMCS+EowmDeb5PXLO" + chr(10) |
...
sPrivKey += "Wr92ZkFVQpvdz6kdIBDa4YP/0JbBAkBVHLjqd1z9x7ZRBZwgwkg2gBwloXZxGpB+" + chr(10) |
...
sPrivKey += "JMARFl+WVYa2vqVD7bhfA56qxAl0IL1sAm7ucl/xhQgDNRiM0YCNAkEAqySTBx2H" + chr(10) |
...
sPrivKey += "O9VyzuWWbf7BYTNsxfO80GaRkZGENfqO1QgnhT1FMeK+ox7Kbi+nSaCBoPjNzyrM" + chr(10) |
...
sPrivKey += "bU08M6nSnkDEGA==" + chr(10) |
...
sPrivKey += "-----END PRIVATE KEY-----" + chr(10) |
...
// Conteudo a ser assinado |
...
varinfo( "sStr", sStr |
...
) // Hash MD5 gerado a partir desse conteudo |
...
cMD5 := Md5( sStr ) |
...
varinfo( "cMD5", cMD5 |
...
) // Assinatura gerada a partir do Hash MD5 usando a chave privada |
...
sSign := PrivSignRSA( sPrivKey, cMD5, 1, "senhachaveprivada" ) |
...
varinfo( "sSign", sSign ) |
...
{code}
h2. Abrangência
Advanced Protheus 7.10, Microsiga Protheus 8.11, Protheus 10, TOTVS Application Server 10, ByYou Application Server
...
Return
|
Veja também
- * [Criptografia]