2015-01-22 2 views
0

바이트 배열을 암호화하려면이 함수가 필요합니다. 이 함수는 암호화 할 바이트 배열, 암호로 된 바이트 배열 및 초기화 벡터로 다른 바이트 배열을 필요로합니다. 기능 자체가 :올바른 바이트 배열을 사용하는 C# 함수 호출

public static byte[] Encrypt(byte[] clearData, byte[] Key, byte[] IV) 
{ 

    MemoryStream ms = new MemoryStream(); 


    Rijndael alg = Rijndael.Create(); 


    alg.Key = Key; 
    alg.IV = IV; 


    CryptoStream cs = new CryptoStream(ms, 
     alg.CreateEncryptor(), CryptoStreamMode.Write); 


    cs.Write(clearData, 0, clearData.Length); 


    cs.Close(); 


    byte[] encryptedData = ms.ToArray(); 

    return encryptedData; 
} 

그것은 이상하게 들릴 수도 있지만이 기능을 사용하기 위해서는 올바른 전화를하지 않습니다. 내 문제는 암호/IV 올바른 바이트 배열을 사용하고 있습니다.

Encrypt(read, new byte[] { 0x49, 0x49, 0x49, 0x49, 0x4, 0x4, 0x4, 0x4 }, new byte[] { 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61 }); 

내가 얼마나이 함수를 호출하는 트릭을하지 않습니다 내가 사용했습니다. 이 함수를 호출하는 바이트 배열의 올바른 버전은 무엇입니까 (암호 및 IV)?

+0

"올바른 전화를받지 마십시오"는 의미는 무엇입니까? 무슨 문제가 보이니? '읽기 '란 무엇입니까? –

+0

읽기는 암호화하려는 바이트 배열을 의미합니다. 컴파일러가 항상 내게 말했고, 키의 크기가 잘못되었습니다. – dehner

+0

네, 16 진수 값으로 바이트를 나타낼 수 있는지 몰랐습니다. – Theyouthis

답변

4

당신은 그 곳을 메시지

를 암호화하고 해독하는 데 사용할 저장 저장

RijndaelManaged myRijndael = new RijndaelManaged(); 
myRijndael.GenerateKey(); 
myRijndael.GenerateIV(); 

으로 키를 생성 할 수 있습니다

byte[] key = myRijindael.Key 
byte[] iv = myRijindael.Iv 

편집 : 당신이 Rijindael 클래스를하지 사용주의 Rijindael Managed. msdn Example에서 그들은 "Rijndael 클래스의 새 인스턴스를 만듭니다. 그러면 새 키와 초기화 벡터 (IV)가 생성됩니다."

그래서 당신은 인스턴스를 생성 한 후 한 번

Rijndael myRijndael = Rijndael.Create() 

그냥 키를 저장합니다.

+0

Great에 해당합니다. 고마워요! – dehner

+0

Keys를 저장하려면 Convert.ToBase64String (key)을 사용하여 문자열로 변환하거나 Convert.FromBase64String (KeyBytes)를 사용하여 바이트 배열을 가져와 소스 파일에 포함 할 수 있습니다 (너무 안전하지는 않음).) – BoeseB

관련 문제