티스토리 뷰
반응형
델파이로 통신용 프로그램을 개발하다보면,
패킷에 적용할 기본적인 함수들이 많이 필요합니다.
그 중 제가 사용하는 암호화, 인코딩 및 디코딩 함수입니다.
델파이11에서 이미 사용중인 함수이기에 검증이 완료된 함수이다.
제 PC에서는 잘 동작되고 있지만,
다른 PC에서는 잘 모르겠습니다.
오동작 또는 보완 사항이 있으시면 댓글 남겨 주세요.
[ 함수 정의 ]
// Encrypt : 상수형 키값을 받아 암호화
function Encrypt(const S: AnsiString; Key: Word): AnsiString;
// Decrypt : 상수형 키값을 받아 복호화
function Decrypt(const S: AnsiString; Key: Word): AnsiString;
// EncryptRC4 : Word형 키값을 받아 RC4 유형으로 암호화
function EncryptRC4(S: string): string;
// DecryptRC4 : Word형 키값을 받아 RC4 유형으로 복호화
function DecryptRC4(S: string): string;
// Base64Encode : Base64 인코딩하여 반환
function Base64Encode(s : string) : string;
// Base64Decode : Base64 디코딩하여 반환
function Base64Decode(s : string) : string;
▶ C1, C2 값을 미리 정수형 상수로 정의하자
▶ RC4 함수의 KetStr은 미리 문자열 상수로 정의하자.
[ 함수 본문 ] 상수형 키값을 받아 암호화
//
//
//
function Encrypt(const S: AnsiString; Key: Word): AnsiString;
var
i: integer;
FirstResult: AnsiString;
begin
SetLength(FirstResult, Length(S));
for i := 1 to Length(S) do
begin
FirstResult[i] := Ansichar(byte(S[i]) xor (Key shr 8));
Key := (byte(FirstResult[i]) + Key) * C1 + C2;
end;
Result := ValueToHex(FirstResult);
end;
[ 함수 본문 ] 상수형 키값을 받아 복호화
//
//
//
function Decrypt(const S: AnsiString; Key: Word): AnsiString;
var
i: integer;
FirstResult: AnsiString;
begin
FirstResult := HexToValue(S);
SetLength(Result, Length(FirstResult));
for i := 1 to Length(FirstResult) do
begin
Result[i] := Ansichar(byte(FirstResult[i]) xor (Key shr 8));
Key := (byte(FirstResult[i]) + Key) * C1 + C2;
end;
end;
[ 함수 본문 ] Word형 키값을 받아 RC4 유형으로 암호화
//
// DCP 콤포넌트를 이용한 암호화
//
function EncryptRC4(S: string): string;
var
Cipher: TDCP_rc4;
begin
Result := '';
if (S = '') or (S = 'NULL') then Exit;
Cipher := TDCP_rc4.Create(application);
Cipher.InitStr(KeyStr, TDCP_sha1); // initialize the cipher with a hash of the passphrase
Result := Cipher.EncryptString(S);
Cipher.Burn;
Cipher.Free;
end;
[ 함수 본문 ] Word형 키값을 받아 RC4 유형으로 복호화
//
// DCP 콤포넌트를 이용한 복호화
//
function DecryptRC4(S: string): string;
var
Cipher: TDCP_rc4;
begin
Result := '';
if (S = '') or (S = 'NULL') then Exit;
Cipher := TDCP_rc4.Create(application);
Cipher.InitStr(KeyStr, TDCP_sha1); // initialize the cipher with a hash of the passphrase
Result := Cipher.DecryptString(S);
Cipher.Burn;
Cipher.Free;
end;
[ 함수 본문 ] Base64 인코딩하여 반환
function Base64Encode(s : string) : string; //base64
var base64 : TIdEncoderMIME;
tmpBytes : TBytes;
begin
base64 := TIdEncoderMIME.Create(nil);
try
base64.FillChar := '=';
tmpBytes := TEncoding.UTF8.GetBytes(s);
Result := base64.EncodeBytes(TIdBytes(tmpBytes));
finally
base64.Free;
end;
end;
[ 함수 본문 ] Base64 디코딩하여 반환
function Base64Decode(s : string) : string; //base64
var base64 : TIdDeCoderMIME;
tmpBytes : TBytes;
begin
Result := s;
base64 := TIdDecoderMIME.Create(nil);
try
base64.FillChar := '=';
tmpBytes := TBytes(base64.DecodeBytes(s));
Result := TEncoding.UTF8.GetString(tmpBytes);
finally
base64.Free;
end;
end;
반응형
'프로그래밍' 카테고리의 다른 글
[Delphi] 델파이 내부IP 외부IP 구하는 함수 (0) | 2023.02.06 |
---|---|
[Delphi] 델파이 도메인을 IP로 변환하는 함수 (0) | 2023.02.06 |
[Delphi] 델파이 우리나라 환경에 맞는 전화번호 형식 반환 함수 (0) | 2023.02.05 |
[Delphi] 델파이 Byte - Hexa 문자열 변환 함수 (0) | 2023.02.05 |
[Delphi] 델파이 날자연산 날짜함수 종합정리 (0) | 2023.02.05 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 성북동부자마을
- 가정용전기드라이버
- 고객관리 #회원관리 #휴대폰주소록 #문자보내기 #콜백문자 #콜백서비스 #자동문자 #통화매니저
- 부재중문자
- 소형전기드릴
- 외부IP구하기
- 전화번호대시넣기
- 선물하기좋은차
- 통화매니저
- 문자보내기 #PC문자보내기 #콜백문자 #콜백서비스 #자동문자 #통화매니저
- 폼위치저장
- 명륜유치원
- Hexa문자열변환
- 통화매니저 #KT통화매니저 #발신자정보표시 #고객관리 #콜백문자 #문자보내기
- 전화특허
- 그레이엄빌
- 한양도성둘레길
- 가정용전기드릴
- 성북동판자촌
- 미니드릴
- 도메인IP변환
- 가정용전동드라이버
- 소형전동드릴
- 고객이음 #문자보내기 #단체문자 #고객관리 #회원관리 #콜백문자 #콜백서비스 #자동문자
- 델파이
- 델파이날짜연산 #델파이날짜함수 #날짜연산 #날짜함수 #델파이
- 내부IP구하기
- 와룡공원드라마촬영장소
- 동부시립병원
- 유기농건강차
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함