C 언어로 된 서버 측 코드에서 Rijndael (암호화 알고리즘)을 사용했습니다. 하지만 내 클라이언트는 C#으로 작성되었고 C#은 자체 Rijndael 클래스를 제공하여 암호화하고 해독합니다.암호화. C에서 암호 해독 #
클라이언트 측에서는 키 생성에 동일한 암호를 사용하고 있지만 클라이언트 응용 프로그램에서 암호를 해독 할 수 없습니다. C에서 파일을 암호화하고 .NET에서 파일을 해독하려고합니다 (C#).
서버 코드 : http://www.efgh.com/software/rijndael.txt
클라이언트 코드 :
당신의 C# 코드에서public static void Encrypt()
{
string password = @"4c696e6775614e6578742431302a4c6f63616c697a6174696f6e2a3949505f3030372a"; // Your Key Here
/*UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(password);*/
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes (password, new byte[] { 0x26, 0xdc, 0xff, 0x00, 0xad, 0xed, 0x7a, 0xee, 0xc5, 0xfe, 0x07, 0xaf, 0x4d, 0x08, 0x22, 0x3c });
string cryptFile = @"F:\Encoding and Decoding\ReadMe_Encrypted.txt";
FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);
RijndaelManaged RMCrypto = new RijndaelManaged();
RMCrypto.KeySize = 256;
RMCrypto.BlockSize = 256;
byte[] key = pdb.GetBytes(RMCrypto.KeySize/8);
byte[] iv = pdb.GetBytes(RMCrypto.BlockSize/8);
CryptoStream cs = new CryptoStream(fsCrypt,
RMCrypto.CreateEncryptor(key, iv),
CryptoStreamMode.Write);
FileStream fsIn = new FileStream(@"F:\Encoding and Decoding\ReadMe.txt", FileMode.Open);
int data;
while ((data = fsIn.ReadByte()) != -1)
cs.WriteByte((byte)data);
fsIn.Close();
cs.Close();
fsCrypt.Close();
}
public static void Decrypt()
{
string password = @"4c696e6775614e6578742431302a4c6f63616c697a6174696f6e2a3949505f3030372a"; // Your Key Here
/* UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(password);*/
// PasswordDeriveBytes pdb = new PasswordDeriveBytes(password, new byte[] { 0x26, 0xdc, 0xff, 0x00, 0xad, 0xed, 0x7a, 0xee, 0xc5, 0xfe, 0x07, 0xaf, 0x4d, 0x08, 0x22, 0x3c });
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(password, new byte[] { 0x26, 0xdc, 0xff, 0x00, 0xad, 0xed, 0x7a, 0xee, 0xc5, 0xfe, 0x07, 0xaf, 0x4d, 0x08, 0x22, 0x3c });
FileStream fsCrypt = new FileStream(@"F:\Encoding and Decoding\ReadMe_Encrypted.txt", FileMode.Open);
RijndaelManaged RMCrypto = new RijndaelManaged();
RMCrypto.KeySize = 256;
RMCrypto.BlockSize = 256;
byte[] key = pdb.GetBytes(RMCrypto.KeySize/8);
byte[] iv = pdb.GetBytes(RMCrypto.BlockSize /8);
CryptoStream cs = new CryptoStream(fsCrypt, RMCrypto.CreateDecryptor(key, iv), CryptoStreamMode.Read);
// CryptoStream cs = new CryptoStream(fsCrypt, RMCrypto.CreateDecryptor(), CryptoStreamMode.Read);
FileStream fsOut = new FileStream(@"F:\Encoding and Decoding\ReadMe_Decrypted.txt", FileMode.Create);
int data;
while ((data = cs.ReadByte()) != -1)
fsOut.WriteByte((byte)data);
fsOut.Close();
cs.Close();
fsCrypt.Close();
}
Welcome to StackOverflow. 먼저 관련 코드 세부 정보를 제공하고 시도한 내용과 실패한 내용을 설명해야합니다. 둘째로, "회신을 부탁합니다"는 무례하고주의를 끌기위한 것으로 간주 될 수 있습니다. StackOverflow는 * 커뮤니티 *의 사이트입니다. 먼저 자신을 위해 두 번째로 : 질문이 잘 연구되고 재미 있으면 사람들이 대답하고 그렇지 않으면 대답하지 않을 것입니다. –
당신이 사용하는 언어에 관한 것이 아니라 알고리즘과 그 구현에 관한 것입니다. –
@ RenéKolařík 이러한 종류의 알고리즘은 비트 단위 연산자를 사용하여 C로 작성 되었기 때문에 언어는 매우 적합합니다. 다른 언어에서는 사용할 수 없습니다. – Lundin