2017-12-19 19 views
0

프론트 엔드에 object을 암호화하고 암호화 된 데이터로 HTTP POST 요청을 보냅니다. 백엔드에서이 객체의 암호를 해독하려하지만 실패합니다.디지털 봉투 루틴 : 잘못된 암호 해독

테스트는 통과되지만 실제 프로젝트에 통합 할 때이 decrypt 방법은 오류와 함께 실패 : 여기

Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt at Error (native) at Decipher.final (crypto.js:158:26) at Object.exports.decrypt.error [as decrypt]

는 관련 코드입니다 :

export const decrypt = text => { 
    if (!text) 
    throw Error('Decrypt: Text may not be blank'); 
    const decipher = crypto.createDecipher(encryptAlgorithm, 
    encryptionKey) 
    let decrypted = decipher.update(text, textEncodingHex, 
    textEncodingUtf8) 
    decrypted += decipher.final(textEncodingUtf8) 
    return decrypted 
} 

그리고 내가 그것을 사용하고 방법이있다

authSignInWeb(): any { 
    return async (request: any, reply: any) => { 
    try { 
     let decrytedRequestPayload = request.payload; 
     if (process.env.REACT_APP_ENCRYPT) { 
     decrytedRequestPayload = JSON.parse(cryptoHelper.decrypt(request.payload)) 
     } 
     ... 
    } catch (error) { 
     reply(error); 
     ... 
    } 
    }; 
}; 
+0

그냥, 그냥 HTTPS 작동 사용하지 왜 안전합니다. – zaph

답변

0

문서 및 기타 온라인 res 우리는이 문제를 해결할 수있었습니다. 이것이 실패한 이유는 HapiJs가 들어오는 페이로드를 가져 와서 구문 분석 한 다음 실제 페이로드를 키 대신 사용하여 Javascript 객체로 authSignInWeb()으로 전달한다는 것입니다.

이 문제를 해결하려면 프런트 엔드에서 데이터를 암호화하고 수동으로 개체를 만들고 암호화 된 정보를 할당해야했습니다. 그런 다음 백엔드에서 페이로드의 객체 키를 액세스합니다. 코드에서

:

프론트 엔드 그렇게 같다 : (authSignInWeb() 내부) 백엔드에서 다음

let encryptedData = {}; 
if (process.env.REACT_APP_ENCRYPT) { 
    encryptedData.data = Crypt.encrypt(JSON.stringify(requestBody)) 
} 

와는 수행

let userAuthData = request.payload; 
if (process.env.REACT_APP_ENCRYPT) { 
    userAuthData = JSON.parse(cryptoHelper.decrypt(userAuthData.data)) 
}