본문을 검색하기 전에 SO와 found this answer은 본질적으로 GUID가 예측 가능하므로 무작위로 사용해서는 안됩니다. 그러나 내 이해에서 나는 의견이 맞지 않는다. 그러나이 질문은 GUID squicing에 관한 것입니다.로그인 키로 사용할 64 비트에 대한 GUID 위험 부담이 있습니까?
제 생각에 GUID는 부분 MAC 주소, 시간 및 난수로 구성됩니다. 나는 GUID의 어떤 부분이 무엇인지 모르지만,이 함수는 근본적으로 2 64 비트 int와 XOR을 함께 사용한다. 나는 현재 1) 비밀번호를 재설정하려는 사람들을위한 리셋 키로 결과를 사용합니다. 2) 로그인 키. 로그인 할 때 db와 쿠키의 키를 설정합니다. 사이트를 방문 할 때마다 쿠키가 사용자 ID 및 loginkey와 데이터베이스가 일치하는지 확인합니다.
안전한가요? 나에게 그것은 충분히 무작위로 느껴진다. 바이트는 물건을 암호화하는 데 사용되지 않습니다. 사람이 100milliseconds에 로그인했을 때 의심 스러울지라도 (네트워크 연결을 통해 확인하는 것을 잊지 마십시오. 직접 DB를 확인하지 않아도됩니다. 이미 값을 볼 수 있습니다)
이 사용에 문제가 있습니까?
public static Int64 GuidInt64(bool noZero=true)
{
Int64 randNum;
do
{
var g = Guid.NewGuid();
var buf = g.ToByteArray();
var l0 = BitConverter.ToInt64(buf, 0);
var l1 = BitConverter.ToInt64(buf, 8);
randNum = l0^l1;
} while (noZero && randNum == 0);
return randNum;
}
내가 멀티 스레딩 시스템 및 system.random에 대해 안전하다고 들었 기 때문에 GUID를 사용했습니다. 그래서 나는 시스템을 잠 갔어. 랜덤. 두 개의 CPU 코어에서 두 개의 난수 생성기가 동일한 난수를 가질 수 있다는 사실을 기억합니다. 솔루션에 문제가 있습니까? 어쩌면 내가 정적 함수와 하나의 System.Security.Cryptography.RNGCryptoServiceProvider하고 그것에 대한 액세스를 잠글 수 있어야합니까? –
MSDN 문서에 따라 RNGCryptoServiceProvider는 스레드로부터 안전합니다. – Yaur
멋지다, 이건 내가 사용할거야.하지만 내가이 특정 질문에 대한 대답을 받아 들일 지 모른다면. –