Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 27517|Resposta: 1

[Fonte] .net/c# Código-fonte criptografado CryptoJS aes

[Copiar link]
Publicado em 07/10/2017 17:39:00 | | | |
Recentemente, fiz uma função de login pós-simulação, a senha de login é criptografada pelo CryptoJS aes, e então quero escrever o algoritmo correspondente em C#
Introdução ao algoritmo de criptografia AES:

Padrão Avançado de Criptografia (abreviação: AES), também conhecido como criptografia de Rijndael em criptografia, é um padrão de criptografia em blocos adotado pelo governo federal dos EUA. Esse padrão é usado para substituir o DES original e tem sido analisado e amplamente utilizado ao redor do mundo. Após um processo de seleção de cinco anos, o Advanced Cryptographic Standard foi publicado pelo Instituto Nacional de Padrões e Tecnologia (NIST) no FIPS PUB 197 em 26 de novembro de 2001, tornando-se um padrão válido em 26 de maio de 2002. Em 2006, o Advanced Encryption Standard tornou-se um dos algoritmos mais populares para criptografia de chave simétrica.

O algoritmo js é o seguinte:



Pesquisei sites online de criptografia AES na Internet, e os resultados são diferentes da minha própria criptografia, o AES parece ter muitos modos, e já vi apresentações de outras pessoas na Internet


Comece preparando um texto simples e uma chave:
var plaintText = 'aa'; Texto simples
var keyStr = 'bbbbbbbbbbbbbbbb'; Geralmente, a tonalidade é uma string  
De acordo com a documentação do site oficial, o método AES suporta AES-128, AES-192 e AES-256, e o método de criptografia usado no processo de criptografia depende do tipo de chave recebida, caso contrário será criptografado conforme o AES-256.
O CryptoJS suporta AES-128, AES-192 e AES-256. Ele vai escolher a variante pelo tamanho da chave que você passa. Se você usar uma senha, ela gerará uma chave de 256 bits.
Como o Java é dado de acordo com 128 bits, mas como é uma string, ele precisa ser convertido para 128 bits no frontend.
No começo, achei que usar CryptoJS.enc.Hex.parse converteria corretamente para uma chave de 128 bits. Mas fora isso...
Após várias tentativas, você precisa usar o método CryptoJS.enc.Utf8.parse para converter a chave para 128 bits. Bem, como dizem que são múltiplas tentativas, então a razão não é conhecida, e será estudada mais a fundo depois.
Antes de usar a tonalidade do tipo de corda, você precisa analisar com o uft8 antes de poder usá-lo
var key = CryptoJS.enc.Utf8.parse(keyStr);  
Como o backend usa PKCS5Padding, mas ao usar CryptoJS, foi constatado que não havia nenhum deslocamento.
Criptografia
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {  
    modo: CryptoJS.mode.ECB,
    enchimento de conteúdo: CryptoJS.pad.Pkcs7
});
Como o texto cifrado gerado pelo CryptoJS é um objeto, se você convertê-lo diretamente para uma string codificada em Base64, o atributo em encryptedData. O texto cifrado é convertido para uma string que é o formato exigido pelo backend.
var encryptedBase64Str = encryptedData.toString();
Output: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='
console.log(encryptedBase64Str);
Você precisa ler ciphertext.toString() no encryptedData para obter o mesmo texto cifrado do Java
var encryptedStr = encryptedData.ciphertext.toString();  
Saída: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06'
console.log(Str criptografado);  
Como o texto cifrado criptografado é uma cadeia de 128 bits, ele precisa ser convertido para o formato codificado em Base64 ao ser descriptografado.
Depois, você precisa usar o método CryptoJS.enc.Hex.parse para convertê-lo para hexadecimal, e então usar CryptoJS.enc.Base64.stringify para converter em uma string codificada em Base64, e então pode passar para o método CryptoJS.AES.decrypt para descriptografar.
Para obter o texto cifrado do tipo de cadeia, você precisa analisá-lo primeiro com o método Hex
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);
Converter texto cifrado para strings Base64
Apenas texto cifrado do tipo Base64 pode descriptografá-lo
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);  
A string convertida para codificação Base64 pode ser passada para o método CryptoJS.AES.decrypt para operação de descriptografia.
Descriptografia
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {  
    modo: CryptoJS.mode.ECB,
    enchimento de conteúdo: CryptoJS.pad.Pkcs7
});
Após a descriptografia do CryptoJS, ele ainda é um objeto, e transformá-lo em texto simples precisa ser convertido em uma string no formato Utf8.
Após a descriptografia, a cadeia de texto simples precisa ser transposta da maneira do Utf8
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);  
console.log(Str decriptografado); 'a'




Aqui está o código-fonte da implementação do AES em .NET/C#:







Anterior:[12306] Desculpe, porque você opera o passageiro com muita frequência, por favor tente novamente amanhã
Próximo:C# implementa mapeamento de memória de processos compartilhando memória de arquivos
Publicado em 29/05/2018 00:27:20 |
Consulte o código-fonte avançado do grande cara
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com