2009-11-03 4 views

답변

85
using System.Security.Cryptography; 
... 
using(RandomNumberGenerator rng = new RNGCryptoServiceProvider()) 
{ 
    byte[] tokenData = new byte[32]; 
    rng.GetBytes(tokenData); 

    string token = Convert.ToBase64String(tokenData); 
} 
+28

WinAPI GUID 생성기의 암호 해독은 V4 GUID 시퀀스가 ​​의사 무작위이므로 초기 상태에서 UuidCreate 함수가 반환하는 다음 250,000 GUID까지 예측할 수 있음을 보여줍니다. 이것이 GUID를 암호 해독 (예 : 무작위 키)으로 사용해서는 안되는 이유입니다. (http://en.wikipedia.org/wiki/Globally_Unique_Identifier에서) – configurator

+1

이것은 특별히 암호화가 아닙니다. 그리고 기계의 초기 상태를 예측하기가 어려울 수 있습니다. –

+10

일반적인 공격은 서버가 다시 시작될 때까지 서버를 DDoS하는 것입니다. 그런 다음 초기 상태 (시스템 시계)를 예측하는 것이 훨씬 쉽습니다. – LaJmOn

3

...

에는 정말 빠른 랜덤 생성기를 확보 없습니다. 빨리 원하면 일반 Random 클래스를 사용해야합니다. 보안을 원하면 암호화 네임 스페이스에서 임의 생성기를 사용해야하지만 상당히 느립니다. 당신은 단순히 둘 다 가질 수 없습니다.

+1

네이티브 암호화 구현으로 interop을 해보고 싶다면 뛰어난 성능 ('System.Random'보다 몇 배 빠름)과 보안 기능을 모두 가질 수 있습니다. – CodesInChaos

+9

@CodesInChaos : 그래서; 빠르고, 안전하고, 간단합니다 - 둘 중 하나를 선택하십시오. :) – Guffa

관련 문제