(byte[] digest, byte[] salt) 함수이름(byte[] password)
{
    byte[] salt=RNG.GetBytes(32);
   /*RNG : 의사난수 생성기. 보통 프레임워크에서 지원함.
    32바이트(256비트)의 솔트값을 생성

    솔트는 password.Length 이런걸로 만들면 안된다.
    패스워드 같은 사용자들 다이제스트가 다 겹침.*/

    var digest=
    PBKDF2(password, salt, 1024, 32, "SHA256");
   //비번, 솔트, 반복 횟수, 반환할 바이트 길이, 해시함수
    //보통 프레임워크에서 다 구현해주고, 파라미터 배열은 프레임워크마다 다를 수 있음.
    //32바이트=256비트=AES256 키사이즈.
    //비번 저장용이면 더 짧게 해도 노상관

    return (digest,salt);
   //해시 다이제스트와 솔트 반환
}
   
누가 아래서 찾아서 함 써봤다.

밀번호 입력받으면 PBKDF2로 해싱해주는 함수.
pbkdf2가 뭔지는 인터넷에 찾아보면 나올테니 생략하고,
간단하게 사용 가능한 의사코드 만들어봤다.
프레임워크별 지원하는 함수명으로 바꿔서 사용하면 된다.
반복수나 해시함수는 파라미터에 넣어도 상관없고.
프레임워크에서 PBKDF2 안에 솔트 생성코드 넣어두거나, 솔트 자릿수 정해뒀으면 그거 따라서 하면 된다.
반환받은 튜플은 테이블에 둘 다 같이 저장하면 됨.