Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 27517|Respuesta: 1

[Fuente] .net/c# Código fuente cifrado en CryptoJS aes

[Copiar enlace]
Publicado en 7/10/2017 17:39:00 | | | |
Recientemente, hice una función de inicio de sesión después de la simulación, la contraseña de inicio de sesión está cifrada por CryptoJS aes, y luego quiero escribir el algoritmo correspondiente en C#
Introducción al algoritmo de cifrado AES:

El Estándar Avanzado de Cifrado (abreviatura: AES), también conocido como cifrado de Rijndael en criptografía, es un estándar de cifrado por bloques adoptado por el gobierno federal de Estados Unidos. Este estándar se utiliza para reemplazar el DES original y ha sido analizado y ampliamente utilizado en todo el mundo. Tras un proceso de selección de cinco años, el Estándar Criptográfico Avanzado fue publicado por el Instituto Nacional de Estándares y Tecnología (NIST) en FIPS PUB 197 el 26 de noviembre de 2001, y se convirtió en un estándar válido el 26 de mayo de 2002. En 2006, el Estándar de Cifrado Avanzado se convirtió en uno de los algoritmos más populares para la criptografía de claves simétricas.

El algoritmo js es el siguiente:



He buscado sitios web de cifrado AES en Internet y los resultados son diferentes a los míos, AES parece tener muchos modos, y he visto presentaciones de otras personas en Internet


Empieza preparando un texto plano y una clave:
var plaintText = 'aa'; Texto plano
var keyStr = 'bbbbbbbbbbbbbb'; Generalmente, la clave es una cadena  
Según la documentación oficial del sitio web, el método AES soporta AES-128, AES-192 y AES-256, y el método de cifrado utilizado en el proceso de cifrado depende del tipo de clave entrante, de lo contrario se cifrará según AES-256.
CryptoJS es compatible con AES-128, AES-192 y AES-256. Elegirá la variante según el tamaño de la clave que pases. Si usas una frase de paso, entonces generará una clave de 256 bits.
Como Java se da según 128 bits, pero al ser una cadena, debe convertirse a 128 bits en el frontend.
Al principio pensé que usar CryptoJS.enc.Hex.parse lo convertiría correctamente a una clave de 128 bits. Pero por lo demás...
Tras varios intentos, necesitas usar el método CryptoJS.enc.Utf8.parse para convertir la clave a 128 bits. Bueno, dado que se dice que son múltiples intentos, entonces la razón no se conoce y se estudiará más a fondo más adelante.
Antes de usar la tonalidad del tipo de cuerda, necesitas analizar con uft8 antes de poder usarla
var key = CryptoJS.enc.Utf8.parse(keyStr);  
Como el backend utiliza PKCS5Padding, pero al usar CryptoJS, se comprobó que no había ningún desplazamiento.
Cifrado
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {  
    modo: CryptoJS.mode.ECB,
    relleno: CryptoJS.pad.Pkcs7
});
Dado que el texto cifrado generado por CryptoJS es un objeto, si lo conviertes directamente a una cadena codificada en Base64, el atributo en encryptedData. El texto cifrado se convierte en cadena y es el formato requerido por el backend.
var encryptedBase64Str = encryptedData.toString();
Salida: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='
console.log(encryptedBase64Str);
Necesitas leer cifradotext.toString() en encryptedData para obtener el mismo texto cifrado que Java
var encryptedStr = encryptedData.ciphertext.toString();  
Salida: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06'
console.log(Str cifrado);  
Dado que el texto cifrado cifrado es una cadena de 128 bits, debe convertirse a formato codificado en Base64 al descifrar.
Luego tienes que usar el método CryptoJS.enc.Hex.parse para convertirlo a hexadecimal, y después usar CryptoJS.enc.Base64.stringify para convertirlo en una cadena codificada en Base64, y después puedes pasarlo al método CryptoJS.AES.decrypt para descifrarlo.
Para obtener el texto cifrado del tipo de cadena, primero tienes que analizarlo con el método hexadecimal
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);
Convertir texto cifrado a cadenas Base64
Solo el texto cifrado tipo Base64 puede descifrarlo
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);  
La cadena convertida a codificación Base64 puede pasarse al método CryptoJS.AES.decrypt para la operación de descifrado.
Descifrado
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {  
    modo: CryptoJS.mode.ECB,
    relleno: CryptoJS.pad.Pkcs7
});
Tras el descifrado con CryptoJS, sigue siendo un objeto, y convertirlo en texto plano debe convertirse en una cadena en formato Utf8.
Tras el descifrado, la cadena de texto plano debe transponerse al estilo de Utf8
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);  
console.log(decifradoStr); 'aa'




Aquí está el código fuente de la implementación de AES en .NET/C#:







Anterior:[12306] Perdón, porque manejas el pasajero demasiado a menudo, por favor inténtalo de nuevo mañana
Próximo:C# implementa el mapeo de memoria de procesos para compartir memoria de archivos
Publicado en 29/5/2018 0:27:20 |
Consulta el código fuente avanzado del gran tipo
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com