Spring Security Custom Login (II)

在上一章節我們已經將原先的登入方式改為自訂方式,那麼接下來就是新增使用者了,那麼新增使用者這部分我會使用jsencrypt進行加密,這一套前端加密方法是使用常見的public、private這種方式,這也算是目前我認為比較可行的使用方式,畢竟效能是有所影響的,再者前端加密意義其實也不大,但這種方式確實可以讓安全再次提升。

JKS

keytool -genkey -v -alias test -keyalg RSA -keystore test.jks

JKS To PKCS12

keytool -importkeystore -srckeystore test.jks -destkeystore test.p12 -srcstoretype JKS -deststoretype PKCS12

PKCS12 To OpenSSL Key

openssl pkcs12 -in test.p12 -out test.key

Get Public Key

openssl rsa -in test.key -pubout -out test_public.pem

上述都做完後,我們會拿到一組名稱為test_public.pem的key,可以直接用記事本開啟即可,就是我們給前端使用的key。

Encoder

於jsencrypt中使用Encoder非常簡單,只要把公鑰與要加密的資料傳入,利用encrypt方法即可取得加密後的編碼,在到後端進行解密。

function encoder(data, publicKey){
    var jsencrypt = new JSEncrypt();
    jsencrypt.setPublicKey(publicKey);

    var result = new Object();

    for(var key in data){
        result[key] = jsencrypt.encrypt(data[key]);
    }
}

Decoder

前端已經加密了,那麼後端則需要解密,解密後,看資料需求,後端會再做一次加密,如密碼可以做Hash + Salt方式進行,

public String decoder(String arg0) {
    byte[] bs = null;
    try {
        BASE64Decoder decoder = new BASE64Decoder();
        bs = decoder.decodeBuffer(arg0);
    } catch (Exception e) {
        e.printStackTrace();
    }

    KeyStore keyStore = null;
    try {
        keyStore = KeyStore.getInstance("JKS");
        keyStore.load(new FileInputStream("D:/jsencrypt/test.jks"), "123456".toCharArray());
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, keyStore.getKey("test", "123456".toCharArray()));
        logger.info(new String(cipher.doFinal(bs)));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

results matching ""

    No results matching ""