2013-07-14 7 views
1

nodejs에서 종류의 재 감독을 만들고 있습니다. userid // superidnodejs에 해시 된 문자열의 웹 보안 인코딩

이러한 URL은 사용자가 URL을 검색하지 못하도록 다른 사용자의 URL을 위조하지 못하도록하기 위해 해시로 만들고 싶습니다. 또한 base64로 인코딩하여 URL 길이를 최소화합니다.

http://myurl.com/~hashedtoken 않은 해시 hashtoken 난과 같이 암호화 라이브러리를 사용하는 방법에 대한 생각

이 55q322q23 (55) = 사용자 ID 같은 수 : 리턴

crypto.createHash('md5').update("55q322q23").digest("base64"); 

: U/mxNJQaSs2HYJ5wirEZOQ을 == 여기에있는 문제는 /는 websafe로 간주되지 않으므로, 어떻게 든 base64 목록에서 안전하지 않은 문자를 제거하고 싶습니다. 이 문제에 대한 아이디어 또는 문제의 해결 방안이 있습니까?

답변

1

URL 안전 변형의 Base64를 사용할 수 있습니다. RFC 4648에 설명 된 가장 일반적인 변형은 각각 +/ 대신 -_을 사용하고 패딩 문자 (=)는 생략합니다.

대부분의 Base64 구현은이 URL 안전 변형도 지원합니다. 그렇다고해도 수동으로 수행하기는 쉽지 않습니다.

+0

설명을 위해 urlsafe-base6 npm 라이브러리를 사용합니다. base64 (안전하지 않은)로 인코딩 한 다음 안전하게 인코딩하기 위해 라이브러리를 사용합니다. – Todilo

0

다음은 내가 사용한 것입니다. 코멘트 환영 :-)

중요한 비트는 buffer.toString ('base64')이고, 그 다음에 URL을 대체하여 base64 문자열을 몇 개의 replace()로 보호합니다.

function newId() { 
    // Get random string with 20 bytes secure randomness 
    var crypto = require('crypto'); 
    var id = crypto.randomBytes(20).toString('base64'); 
    // Make URL safe 
    return id.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); 
} 

구현을 기준으로 here.

@ 및 @ 전에 URL 및 로컬 전자 메일 주소에 대해 안전 한 문자열을 만듭니다.

관련 문제