C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[75762] Re:ini파일로 암호화 및 복호화하여 정보 보내는법
il's [magicfox] 2338 읽음    2020-02-10 23:40
//---------------------------------------------------------------------------
const char HexaChar[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//---------------------------------------------------------------------------
AnsiString __fastcall ValueToHex(AnsiString Value)
{
    AnsiString FResult = "";

    FResult.SetLength(Value.Length() * 2);

    for (int I = 0; I < Value.Length(); I++)
    {
        FResult[(I * 2) + 1] = HexaChar[int(Value[I + 1]) >> 4];
        FResult[(I * 2) + 2] = HexaChar[int(Value[I + 1]) & 0x0F];
    }

    return FResult;
}
//---------------------------------------------------------------------------
AnsiString __fastcall HexToValue(AnsiString Hex)
{
    AnsiString SResult = "";

    SResult.SetLength((Hex.Length() / 2));

    for (int I = 0; I < (Hex.Length() / 2); I++)
    {
        SResult[I + 1] = char(StrToInt("0x" + Hex.SubString((I * 2) + 1, 2)));
    }

    return SResult;
}
//---------------------------------------------------------------------------
AnsiString __stdcall Encrypt(AnsiString Value, Word Key)
{
    AnsiString SResult = "";

    SResult.SetLength(Value.Length());

    for (int I = 1; I < Value.Length() + 1; I++)
    {
        SResult[I] = char(byte(Value[I]) ^ (Key >> 8));
    }

    return ValueToHex(SResult);
}
//---------------------------------------------------------------------------
AnsiString __stdcall Decrypt(AnsiString Value, Word Key)
{
    AnsiString SValue = "";
    AnsiString SResult = "";

    SValue = HexToValue(Value);

    SResult.SetLength(SValue.Length());

    for (int I = 1; I < SValue.Length() + 1; I++)
    {
        SResult[I] = char(byte(SValue[I]) ^ (Key >> 8));
    }

    return SResult;
}
//---------------------------------------------------------------------------

TIniFile *UserInfoIni = new TIniFile("UserInfo.INI");
ReadPassStr = UserInfoIni->ReadString("USER PASS", "AA", "");
SelectUserPass = Decrypt(ReadPassStr, 1234); 복원  -> Key값 1234 는 아무값이나 넣어주시면 됩니다.

UserInfoIni->WriteString("USER PASS", "AAA", Encrypt("암호", 1234));

Decrypt, Encrypt 함수에서 Key 값은 동일해야 합니다.

위 소스는 제가 쓰고 있는 소스 입니다.



임윤관 님이 쓰신 글 :
: 안녕하세요. 업무일지 프로그램을 수정하고 있습니다.
:
: 처음에 로그인할때 id, 비밀번호를 입력한것을 "ID저장"이라는 체크박스를 눌렀을때 (CheckBox1->Checked==true사용)

:  ini파일로 저장을하고, "ID저장"이라는 체크박스를 누르지 않았을때는 ( CheckBox1->Checked!=true사용)
:
: ini파일로 공백으로 id,비밀번호가 저장되서
: ("Settings", "Id", FrmLogin->editId->Text), ("Settings", "Pw", FrmLogin->editPassword->Text) 사용
:
: 이후 로그인할때 체크박스를 누르면 그 전에 체크박스를 누른체로 로그인 했을경우
: 그때 로그인한 ID,비밀번호가 불러와집니다.
:
: 생각을해보니 체크박스를 눌러서 id,비밀번호가 저장이 되면 ini파일을 열었을때 id,비밀번호가 고스란히 노출이 되는 문제가 있습니다.
: 처음 Writestring으로 보낼때 암호화해서 ini보내지고  Readstring 했을때 복호화해서 로그인정보를 불러올수 있을까요?...
:
: 인터넷에서 검색해서 여러가지 예제를 대입해봤는데 되지가 않네요 ㅠㅠ
: 아래는 Readstring, Writestring을 사용한 소스 일부입니다.
:
:



:
: //==========================================================================
: if(CheckBox1->Checked)
:     {
:     ini->WriteString("Settings", "Id", FrmLogin->editId->Text);       //////
:     ini->WriteString("Settings", "Pw", FrmLogin->editPassword->Text);
:     }
: //==========================================================================
:         if(CheckBox1->Checked==true)
:     {
:         FrmLogin->editId->Text          =   ini->ReadString("Settings", "Id", FrmLogin->editId->Text);
:         FrmLogin->editPassword->Text    =  ini->ReadString("Settings", "Pw", FrmLogin->editPassword->Text);
:     }
: //==========================================================================
:         if(CheckBox1->Checked!=true)
:    {
:       String path = ExtractFilePath( Application->ExeName )+"Ipinfo.ini";                            //2020
:         TIniFile *ini = new TIniFile( path );
:     ini->WriteString("Settings", "Id", "");
:     ini->WriteString("Settings", "Pw", "");
:    }
: //==========================================================================
:     FrmLogin->editId->Text          =   ini->ReadString("Settings", "Id", FrmLogin->editId->Text);
:         FrmLogin->editPassword->Text    =  ini->ReadString("Settings", "Pw", FrmLogin->editPassword->Text);
:
: //==========================================================================

+ -

관련 글 리스트
75750 ini파일로 암호화 및 복호화하여 정보 보내는법 임윤관 2820 2020/01/15
75762     Re:ini파일로 암호화 및 복호화하여 정보 보내는법 il's 2338 2020/02/10
75751     Re:ini파일로 암호화 및 복호화하여 정보 보내는법 정영훈 2131 2020/01/16
75752         Re:Re:ini파일로 암호화 및 복호화하여 정보 보내는법 임윤관 2236 2020/01/16
75753             Re:Re:Re:ini파일로 암호화 및 복호화하여 정보 보내는법 정영훈 2441 2020/01/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.