티스토리 뷰
728x90
반응형
C# 암호화 / 복호화 Aes 128, Salt 추가, 파일 Master key 8 Byte 삽입)
Aes 암호화된 파일앞에 userid Unicode로 삽입
복호화에서 파일앞 8바이트 userid를 확인하고
나머지는 MemoryStream에 저장 > 복호화 진행(비밀번호 Salt확인)
point MemroyStream의 position이 마지막으로 가있으니 position을 처음으로 옮겨준다.
Mstream.Position = 0;
public static async Task EncryptFile(string inputFile, string outputFile)
{
try
{
UnicodeEncoding UE = new UnicodeEncoding();
byte[] key =UE.GetBytes(password);
string cryptFile = outputFile;
FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create );
RijndaelManaged RMCrypto = new RijndaelManaged();
FileStream fsIn = new FileStream(inputFile, FileMode.Open);
int data;
string userid = "TestTest";
byte[] key2 = Encoding.UTF8.GetBytes(userid);
fsCrypt.Write(key2, 0, key2.Length);
CryptoStream cs = new CryptoStream(fsCrypt, RMCrypto.CreateEncryptor(key, key), CryptoStreamMode.Write);
while ((data = fsIn.ReadByte()) != -1)
{
cs.WriteByte((byte)data);
}
cs.FlushFinalBlock();
fsIn.Close();
cs.Close();
fsCrypt.Close();
return true;
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
return false;
}
}
public static async Task<bool> DecryptFile(string inputFile, string outputFile)
{
try
{
UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(password);
FileStream fileStream = new FileStream(inputFile, FileMode.Open);
byte[] All_Byte = new byte[fileStream.Length];
using (MemoryStream Mstream = new MemoryStream())
{
string userid = "TestTest";
byte[] key2 = Encoding.UTF8.GetBytes(userid);
byte[] Data_first = new byte[key2.Length];
for (int i = 0; i < key2.Length; i++)
{
Data_first[i] = (byte)fileStream.ReadByte();
}
int data;
while ((data = fileStream.ReadByte()) != -1)
{
Mstream.WriteByte((byte)data);
}
RijndaelManaged RMCrypto = new RijndaelManaged();
Mstream.Position = 0;
CryptoStream cs = new CryptoStream(Mstream, RMCrypto.CreateDecryptor(key, key), CryptoStreamMode.Read);
FileStream fsOut = new FileStream(outputFile, FileMode.Create);
Console.WriteLine(RMCrypto.Padding.ToString());
int dataB;
while ((dataB = cs.ReadByte()) != -1)
{
fsOut.WriteByte((byte)(dataB));
}
fsOut.Close();
cs.Close();
fileStream.Close();
return true;
} // using
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
return false;
}
}
반응형
'ETC' 카테고리의 다른 글
Ubuntu 20.04 Nginx Certbot cert error (0) | 2021.06.08 |
---|---|
SQLite SubString(), Len() , Left(), Right()오류 (0) | 2021.05.26 |
MS-Sql 오전, 오후 > 24시간 Convert DateTime, Try_Convert (0) | 2021.01.27 |
.NET Core 웹 응용 프로그램 오류 - HTTP Error 500.35 (0) | 2020.12.28 |
Float flo = Integer/Integer ; flo = 0이다. (0) | 2020.12.10 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Label Text LineBreak in Xaml
- C# LINQ Left join
- ssl_client_socket_impl.cc
- GetCellContent CheckBox Value
- WPF Datagrid Cell Value Change
- ClickOnce 인증서 인증기간 변경
- Xamarin.Ios Firebase Phone Auth
- WPF Scrollviewer in ScrollViwer
- 서버 수준의 URN 필터
- c# Encrypt / Decrypt
- Embeded 한글Font적용
- 연산자 뒤에 피연산자가 없습니다.
- Microcharts
- Xamarin.Ios Firebase Phone SMS OTP Send
- FileStream Add Byte
- Windows IIS FTP 디렉토리 목록 오류
- Entry '' has empty native path
- Xamarin.Forms
- Xamarin Firebase Phone Auth
- Xamarin.Ios Firebase Phone User Add
- 암호 마스터키
- WPF Textbox
- WPF Excel Export Microsoft.Office.Interop 성능향상(열 기준으로 복사)
- Xamarin Firebase Phone User Add
- Linux SSH Multi Computer Join
- Xamarin SMS OTP Send
- Xamarin reCAPTCHA
- SkiaSharp
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함