2010-07-15 5 views
0

저는 .NET CryptoProvider 공간에 익숙하지 않으며 RSACryptoProvider에 의해 동일한 키가 반복적으로 생성되는 것에 대해 약간 우려하고 있습니다. 내가 지금처럼 (나는 CspBlob이 창조 이후 내보내고 나중에 다시 가져옵니다), 서버에서 파일에 키를 저장하고 있기 때문에 나는이 케이스 컨테이너 이름에 ...RSACryptoProvider는 동일한 CspParameter ContainerName에 대해 동일한 키를 반복적으로 생성합니다.

_cp = new CspParameters { KeyContainerName = ContainerName }; 

을 컨테이너를 사용하고 있습니다 내가 컨테이너를 참조하는 하드 코딩 된 값을가집니다. 나를 괴롭히는 이유는 RSACryptoProvider를 만들 때 키 쌍을 사용하여 생성 된 키 값이 항상 동일하기 때문입니다!

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(RSAKeySize, _cp); 

컨테이너의 이름을 변경하면 키가 변경됩니다. RSACryptoProvider를 만들 때 컨테이너 이름과 다른 임의적 인 소스가 있어야합니다. 맞습니까? 그렇지 않으면 컨테이너 이름이 암호가됩니다. 이는 내 의도가 아닙니다.

답변

1

발전기가 아닌 컨테이너의 이름입니다.

매번 다른 키를 원하면 컨테이너 (== 저장된 키 쌍)를 참조하지 않고 새로운 CryptoServiceProvider를 생성하면됩니다.

+0

오른쪽. 컨테이너의 이름을 아는 경우 어디서나 동일한 키 쌍을 다시 만들 수 있습니다. 그건 지독한 보안입니다. 그러면 컨테이너의 이름이 암호가됩니다. – Bob

+0

@Bob. 어 ... 아니. 해당 이름의 컨테이너는 컴퓨터의 프로필 Application Data 디렉터리에 저장됩니다. 동일한 컴퓨터에서 이름으로 해당 컨테이너를 열면 내부에 키가 표시됩니다. 다른 컴퓨터에서 열려고하면 가져올 항목이 없습니다. 컴퓨터는 컨테이너를 처음 사용할 때 자동으로 키를 생성하고 다음 번에 필요할 때 안전하게 보관합니다. @Henk이 제안했듯이 * new * 키를 얻는 다른 방법이 있습니다. – ewall

+0

좋습니다. 그게 내가 필요한 전부 야. 키의 임의성은 내 프로필 및 컨테이너 이름에 첨부됩니다. 그것은 나를 위해 일합니다. 고맙습니다. – Bob

0

다음 코드는 containername과 관련된 키 (있는 경우)를 삭제합니다. 키를 삭제 한 후; 당신은 동일한 conatiner 이름을 가진 새로운 것을 만들 수 있고 당신은 새로운 무작위 키를 얻을 것입니다.

  CspParameters cspParams = new CspParameters(); 
      // Specify the container name using the passed variable. 
      cspParams.KeyContainerName = ContainerName; 

      //Create a new instance of RSACryptoServiceProvider. 
      //Pass the CspParameters class to use the 
      //key in the container. 
      RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspParams); 

      //Delete the key entry in the container. 
      rsa.PersistKeyInCsp = false; 

      //Call Clear to release resources and delete the key from the container. 
      rsa.Clear(); 
관련 문제