Pergunta

Ok, então eu tenho um formato binário proprietário. Isso é basicamente uma embalagem solta de vários conjuntos de dados de rasters diferentes. De qualquer forma, no passado, apenas ler isso e descompactar era uma tarefa fácil. Mas agora, na próxima versão, os dados Raster XML agora devem ser criptografados usando o AES-256 (não minha escolha nem temos uma escolha).

Agora, basicamente, recebemos a chave da AES junto com o sal que eles estão usando para que possamos modificar nosso Unpbackager.

Observe que estas não são as chaves apenas um exemplo:

Eles são caracteres ASCII de 63 byte de longa duração:

Key: "QS;x||COdn'YQ@vs-`X\/xf}6T7Fe)[qnr^U*HkLv(yF~n~E23DwA5^#-YK|]v."
Salt: "|$-3C]IWo%g6,!K~FvL0Fy`1s&N<|1fg24Eg#{)lO=o;xXY6o%ux42AvB][j#/&"

Basicamente, queremos usar o C ++ Cryptoapi para descriptografar isso (eu também sou o único programador aqui esta semana, e isso vai ao vivo amanhã. Não é nossa culpa). Eu procurei um tutorial simples de implementar isso. Infelizmente, não consigo nem encontrar um tutorial onde eles tenham sal e chave separadamente. Basicamente, tudo o que realmente tenho agora é uma pequena função que recebe uma variedade de byte. Junto com seu comprimento. Como posso fazer isso?

Passei a maior parte da manhã tentando fazer cabeças/caudas dos criptopi. Mas não está indo bem período :(

EDITAR

Então eu pedi como eles o criptografaram. Eles usam C#e usam RijndaelManaged, o que, pelo que sei, não é equivalente ao AES.

Edit2

Ok, finalmente conseguiu exatamente o que estava acontecendo e eles nos enviaram as chaves erradas.

Eles estão fazendo o seguinte:

Preenchimento = pkcs7 ciphermode = cbc A chave é definida como um conjunto de 32 bytes em hexadecimal. O IV é definido como um conjunto de 32 bytes também em hexadecimal.

Eles tiraram o sal quando eu perguntei a eles.

Quão difícil é definir essas coisas em Cryptoapi usando o arquivo de cabeçalho do wincrypt.h?

Foi útil?

Solução

O AES-256 usa teclas de 256 bits. Idealmente, cada chave em seu sistema deve ser igualmente provável. Uma corda de 63 bytes seria 504 bits. Primeiro, você precisa descobrir como a sequência de 63 caracteres precisa ser convertida em 256 bits (os da amostra que você deu não são codificados base64). Em seguida, "sal" não é uma parte intrínseca do AES. Você pode estar se referindo a um vetor de inicialização (iv) no modo de cadeia de blocos cifra ou pode estar se referindo a atualizar de alguma forma a chave.

Se eu adivinhar, estou assumindo que, por "sal", você quer dizer IV e especificamente o modo CBC.

Você precisará saber tudo isso ao usar as funções CAPI (por exemplo descriptografar).

Se tudo isso parecer confuso, pode ser melhor alterar seu design para que você não precise se preocupar em acertar tudo isso. Crypto é difícil. Um passo ruim pode invalidar toda a segurança. Considere olhar este comentário no meu Guia de figuras de stick para AES.

ATUALIZAR: Você pode Veja isso para uma partida difícil Ponto para C ++ capi. Você precisará de uma corda hexadecimal de 64 caracteres para obter 256 bits (256 bits / (4 bits / char) == 64 chars). Você pode converter os chars para você mesmo.

Novamente, devo advertir que jogar rápido e solto com IV e chaves pode ter consequências desastrosas. Estudei a AES/Rijndael em profundidade até o nível de matemática e portão e até escrevi minha própria implementação. No entanto, no meu código de produção, continuo usando uma implementação TLS bem testada, se possível, para dados em trânsito. Mesmo para dados em repouso, seria melhor usar um Biblioteca de nível superior.

Outras dicas

Rijndael é o nome do algoritmo para Aes

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top