Interacción de front-end y back-end, cifrado de contraseña, RSA implementa cifrado js de front-end y descifrado de back-end

Introducción al algoritmo de cifrado RSA

Un algoritmo de cifrado asimétrico relativamente común, que se utiliza a menudo para cifrar contraseñas en interacciones de front-end y back-end. El front-end utiliza la clave pública para cifrar la contraseña y el back-end utiliza la clave privada para descifrarla. La clave pública se puede abrir al mundo exterior y la clave privada se almacena en el servidor. En circunstancias normales, no se puede obtener la clave privada de descifrado externo.

La siguiente es una explicación parcial de la Enciclopedia Baidu: La
RSA criptografía de clave pública es un criptosistema que utiliza diferentes claves de cifrado y claves de descifrado: "Es computacionalmente inviable derivar la clave de descifrado a partir de una clave de cifrado conocida".

En la criptografía de clave pública, la clave de cifrado (clave pública) PKes información pública, mientras que la clave de descifrado (clave secreta) SKdebe mantenerse en secreto. Los algoritmos de cifrado Ey descifrado Dtambién son públicos. Aunque la clave de descifrado está determinada SKpor la clave pública , no se puede calcular en función de ella .PKPKSK

Generar clave pública, clave privada

  1. goEncrypt
    Llamar directamente a la función puede generar un archivo de clave privada y un archivo de clave pública GetRsaKeylocalmente.private.pempublic.pem

    func main() {
          
          
    	goEncrypt.GetRsaKey()
    }
    
  2. openssl
    Generar clave privada

    openssl genrsa -out rsa_1024_priv.pem 1024
    

    Generar clave pública

    openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem
    

El front-end jsutiliza cifrado de clave pública

Primero presente al protagonista:, jsencrypt.min.jsel archivo está en el directorio del repositorio https://github.com/travist/jsencryptbin .

Uso básico:

var encrypt = new JSEncrypt();
encrypt.setPublicKey(`-----BEGIN  WUMAN  RSA PUBLIC KEY -----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA29fttcEDUvhGJEhQXEIH
8blptZRF5itec4GtEGtkSr4Wjmsf2o2XKOr6YEbTOeDA/DdnDSbVzK2ZUscqyBxb
KGwI/Bpv9l5K/sh9+Oj2Y8YH53+XkqRSGvmhHqolhb+gcfH+FKG5IflGuiOREs4h
02TVmPAFPTmZjYBeVexJgmPodGPOe36QVnMeOG8tHOFxItkMvJUpilzs85xdHqTT
jWCtk/SjHrp5NGSkHSmionOtrFiksS/gTX0EzrptmAGHTjZV0NX7Nu8Ma45rVdMR
wXrDPbk0yR0iFdBEZ1ceGsNg2VjrZ3LCZi3zO+ieA7sBjHARHai5MuFlh9KJ8+Yk
wwIDAQAB
-----END  WUMAN  RSA PUBLIC KEY -----`);
var encrypted = encrypt.encrypt("test");

encryptedEs la cadena cifrada que se pasará al backend. testDespués del cifrado utilizando la clave pública:mFWBdT4Y70ZNEQ7PVIFKwbkefufu52WGXYLrW0Vk1XuajrrEE54dqj4VK2yuGIeMq5bHKAdkDnACB2ABzHLQuobTDpkS0Nj5AlJvwbRDV3pOCB1x0q3aqEooTppeMs8P/WG3YCRDTQPWgZISPsFBQVT1tk77BiImcY4SZM9IL0B4TFUKS9sShnjAebxmJkj8jfYYh7gNzUY0YMvOV6HuiT5C0RsbTe1jwMyN87QEwvpvuPelkeQ8LX1AG+qsn2q4TvOYEKCNfNnePjMIQ/5MlesledwiqUpc/YtY3qj4Qx+8b5luaQ6kyu+zyOXV/A0XjjxIxqLWKU8eAl7eA3o72Q==

El backend goutiliza una clave privada para descifrar

Protagonista: github.com/wumansgy/goEncrypt

Nota: JSEncrypt Lo que obtienes se base64convierte, por lo que primero tenemos que convertirlo base64.

Uso básico:

package main

import (
	"fmt"
	"encoding/base64"
	"github.com/wumansgy/goEncrypt"
)

var privateKey = []byte(`-----BEGIN  WUMAN RSA PRIVATE KEY -----
MIIEpgIBAAKCAQEA29fttcEDUvhGJEhQXEIH8blptZRF5itec4GtEGtkSr4Wjmsf
2o2XKOr6YEbTOeDA/DdnDSbVzK2ZUscqyBxbKGwI/Bpv9l5K/sh9+Oj2Y8YH53+X
kqRSGvmhHqolhb+gcfH+FKG5IflGuiOREs4h02TVmPAFPTmZjYBeVexJgmPodGPO
e36QVnMeOG8tHOFxItkMvJUpilzs85xdHqTTjWCtk/SjHrp5NGSkHSmionOtrFik
sS/gTX0EzrptmAGHTjZV0NX7Nu8Ma45rVdMRwXrDPbk0yR0iFdBEZ1ceGsNg2Vjr
Z3LCZi3zO+ieA7sBjHARHai5MuFlh9KJ8+YkwwIDAQABAoIBAQCyBCtMXbqfWMMT
ZisMSbu9FPJwQlxHgR6+UWceQJe5nisNr9jfVH/udje/9hncaA5dLU+Y6rV9Q6U/
zl7qI2v9U14DJjU7PidkIF1BTQMWz6he4IaQC9cgWLsK5aP0pbL6EYY4lqwewodu
+pXisF/bmW8MpG7ZoOaiGixJT0hG97aS3YD506RqdnK4a9yG5ycoVUZTzFTIM+aq
MCTOWJLbHJBnY52v7Rqaor1jZ0o+C/Cykbts25VHWZ9ygxBfI/S75jTg/zibpqbo
TnICGBqzzfAsThHYiji3ZgEF2bSadxQZ956Rvm5Dlhk0A6ylwKl1gJTAxyZNRjx2
zogLHNFhAoGBAP3TmQSpyYtjr8xdD+AsinMi3q3p/6+FPBh5wrV9Dvd5aSrKCYnU
j/9LOYmCP6JfKc90K3L0PKTfS1LDZXHoeYpzxB0uD2iTIkYQKraUp7rzqLBMkdTB
nTuOByqnTB45WlWlfy6m/8CO+0r5DkrO1fU8gWkg3+bUQoUTPOhuFkqdAoGBAN25
1oVmFyDvxw62WZ95SPktqzmErFH/X+7wpGInUb0vxnGJ0SP2bVgMLyL9Ecz8p5hC
ZEZVbo/WFs17hqz8Z6Xx4Gq7aoredpsZswpApdODs5sQf72LXj4Cuf1iwMGIyQxa
8hElV9uRIeKfEG2E/HBLLPO8qhGBCsWIT1Jms97fAoGBAPQFIf2usTkVXCPvb9zH
VU79PfEanhoCz9SD8mGCWgomqaleVK8yMEFx8120XzLdpBdyCndYQJkMpqBpgzRw
F7C4PNkEuAGEOhX7YuTmox4DM7BR3H0aqetgTpl9/pqr7qGaGlwiZoubqhDYwRnA
IUfDpHIKDdcfRtgit5KIi1utAoGBAKqoAK8IFsEpDGMMgwq1hS8UsXdB4If0MNht
q3hInycoAGsfEjPF1f8w0Y7yjaLiy/PrFdb0pnZa544ch1nZo8Ub2AkOW0CrXUqf
iyhW/ctA0RqGpmszO8QqwRB/07CiIWw7C5maznaWzCfrGe/RraKYme63xYZXdfz3
n2Xi2oqtAoGBAPB2SL1UafzZiC70e+NeDeaCLTCorCvIrN73RngYXU1OKUynrcjL
xOs8yVFs5cK0sNwEkiozcldfOfU2j70tyrGz+txi5+Db6ex5VXmEKSqdZXRDtqqc
KKRFfpuebqdaR50SDa4Lq6JbqYtwg0CLZeju4Mq41i9F2p4myqVDUsZs
-----END  WUMAN RSA PRIVATE KEY -----
`)

func main() {
    
    
	ciphertext, err := base64.StdEncoding.DecodeString(`mFWBdT4Y70ZNEQ7PVIFKwbkefufu52WGXYLrW0Vk1XuajrrEE54dqj4VK2yuGIeMq5bHKAdkDnACB2ABzHLQuobTDpkS0Nj5AlJvwbRDV3pOCB1x0q3aqEooTppeMs8P/WG3YCRDTQPWgZISPsFBQVT1tk77BiImcY4SZM9IL0B4TFUKS9sShnjAebxmJkj8jfYYh7gNzUY0YMvOV6HuiT5C0RsbTe1jwMyN87QEwvpvuPelkeQ8LX1AG+qsn2q4TvOYEKCNfNnePjMIQ/5MlesledwiqUpc/YtY3qj4Qx+8b5luaQ6kyu+zyOXV/A0XjjxIxqLWKU8eAl7eA3o72Q==`)
	if err != nil {
    
    
		return 
	}

	plaintext, err := goEncrypt.RsaDecrypt(ciphertext, privateKey)
	if err != nil {
    
    
		return 
	}
	fmt.Println("明文:", string(plaintext)) // test
}

referencia

jsencrypt
goEncrypt
Enciclopedia Baidu Algoritmo RSA

Supongo que te gusta

Origin blog.csdn.net/DisMisPres/article/details/122070167
Recomendado
Clasificación