TNB Library
TnbCipherableFileAccessor.h
[詳解]
1#pragma once
11#include "TnbBytesCipher.h"
13#include "TnbFileName.h"
14#include "TnbFile.h"
15#include "TnbSerializeAdapter.h"
16
17
18
19//TNB Library
20namespace TNB
21{
22
23
24
51{
52 DEFSUPER(CTemporaryAccessor);
53 CStr m_strFileName;
54 CStr m_strHeadText;
55 CBytesCipher m_cipher;
56
61 void m_Read(LPCTSTR lpszFile)
62 {
63 _super::DeleteAllSection();
65 TNB::LoadCollection(lpszFile, m_strHeadText, vb);
66 vb = m_cipher.Decode(vb);
67 if ( ! vb.IsValid() )
68 {
69 throw CReadFailureException(ERROR_ACCESS_DENIED);
70 }
71 CDeserializeAdapter sr(&vb);
72 sr >> CSerializeTag(_T("CiphFA"));
73 sr >> _super::m_mapSec;
74 }
75
80 void m_Write(LPCTSTR lpszFile)
81 {
83 CSerializeAdapter sr(&vb);
84 sr << CSerializeTag(_T("CiphFA"));
85 sr << _super::m_mapSec;
86 TNB::SaveCollection(lpszFile, m_strHeadText, m_cipher.Encode(vb));
87 }
88
89public:
90
101 explicit CCipherableFileAccessor(LPCTSTR lpszFileName, LPCTSTR lpszHeadText, LPCTSTR lpszKey) : _super()
102 {
103 SetBase(lpszFileName, lpszHeadText, lpszKey);
104 }
105
116 void SetBase(LPCTSTR lpszFileName, LPCTSTR lpszHeadText, LPCTSTR lpszKey)
117 {
118 m_cipher.SetKey(lpszKey);
119 m_cipher.Compression(true);
120 m_strFileName = lpszFileName;
121 m_strHeadText= lpszHeadText;
122 CFileName fn = lpszFileName;
123 if ( fn.IsExist() )
124 {
125 m_Read(fn);
126 }
127 }
128
133 virtual CStr GetTypeName(void) const
134 {
135 return _T("CipherableFile");
136 }
137
145 virtual bool Flush(void)
146 {
147 CFileName fn = m_strFileName;
148 try
149 {
150 m_Write(fn);
151 }
152 catch(CTnbException& e)
153 {
154 e.OnCatch();
155 return false;
156 }
157 catch(...)
158 {
159 return false;
160 }
161 return true;
162 }
163};
164
165
166
175{
176 DWORD dwKind = t.GetKind();
177 _sr << dwKind;
178 //
179 switch ( dwKind )
180 {
181 case IAccessor::EK_Nothing:// 存在しない
182 break;
183 case IAccessor::EK_String: // 文字列
184 _sr << t.QueryString();
185 break;
186 case IAccessor::EK_PluralStrings: // 複数の文字列群
187 _sr << t.QueryPluralStrings();
188 break;
189 case IAccessor::EK_Binary: // バイナリ
190 _sr << t.QueryData();
191 break;
192 case IAccessor::EK_Dword: // 32Bit Unsigned Integer
193 _sr << t.QueryDword();
194 break;
195 case IAccessor::EK_Longlong: // 64Bit Signed Integer
196 _sr << t.QueryLonglong();
197 break;
198 default:
199 ASSERTLIB(false);
200 break;
201 }
202 return _sr;
203}
204
213{
214 DWORD dwKind;
215 ds >> dwKind;
216 //
217 switch ( dwKind )
218 {
219 case IAccessor::EK_Nothing:// 存在しない
220 _t = IAccessor::CValue();
221 break;
222 case IAccessor::EK_String: // 文字列
223 {
224 CStr s;
225 ds >> s;
226 _t = IAccessor::CValue(s);
227 }
228 break;
229 case IAccessor::EK_PluralStrings: // 複数の文字列群
230 {
231 CStrVector vs;
232 ds >> vs;
233 _t = IAccessor::CValue(vs);
234 }
235 break;
236 case IAccessor::EK_Binary: // バイナリ
237 {
238 CByteVector vb;
239 ds >> vb;
240 _t = IAccessor::CValue(vb);
241 }
242 break;
243 case IAccessor::EK_Dword: // 32Bit Unsigned Integer
244 {
245 DWORD dw;
246 ds >> dw;
247 _t = IAccessor::CValue(dw);
248 }
249 break;
250 case IAccessor::EK_Longlong: // 64Bit Signed Integer
251 {
252 LONGLONG ll;
253 ds >> ll;
254 _t = IAccessor::CValue(ll);
255 }
256 break;
257 default:
258 ASSERTLIB(false);
259 _t = IAccessor::CValue();
260 break;
261 }
262 return ds;
263}
264
265
266
267};//TNB
暗号情報関係のヘッダ
ファイルネーム関係のヘッダ
ファイル関係のヘッダ
情報群管理のシリアライザーアダプタ関係のヘッダ
テンポラリ情報アクセス関係のヘッダ
情報暗号復号クラス
bool Decode(ICollectionT< BYTE > &_out, const IConstCollectionT< BYTE > &in)
[設定] 復号化
bool Encode(ICollectionT< BYTE > &_out, const IConstCollectionT< BYTE > &in)
[設定] 暗号化
void SetKey(const CAscii &ascKey)
[設定] キー設定.
void Compression(bool boIsEnable)
[設定] 圧縮モード.
暗号ファイル情報アクセスクラス
virtual CStr GetTypeName(void) const
[取得] タイプ名取得
virtual bool Flush(void)
[操作] フラッシュ.
CCipherableFileAccessor(LPCTSTR lpszFileName, LPCTSTR lpszHeadText, LPCTSTR lpszKey)
コンストラクタ
void SetBase(LPCTSTR lpszFileName, LPCTSTR lpszHeadText, LPCTSTR lpszKey)
[設定] ベース指定
デシリアライズアダプタ.
ファイル名管理クラス
Definition: TnbFileName.h:59
bool IsExist(void) const
[確認] 有無チェック
Definition: TnbFileName.h:455
読み込み失敗発生例外
Definition: TnbException.h:241
シリアライズアダプタ.
シリアライズタグクラス.
テンポラリ情報アクセスクラス
例外ベースクラス
Definition: TnbException.h:36
void OnCatch(void) const
[表示] 内容表示
Definition: TnbException.h:69
bool IsValid(void) const
[確認] 有効チェック
Definition: TnbVector.h:687
情報アクセスの汎用値保持クラス.
Definition: TnbAccessor.h:100
CStr QueryString(void) const
[取得] 文字列情報取得
Definition: TnbAccessor.h:185
LONGLONG QueryLonglong(void) const
[取得] 数値情報取得
Definition: TnbAccessor.h:253
CByteVector QueryData(void) const
[取得] バイナリ情報取得
Definition: TnbAccessor.h:229
DWORD QueryDword(void) const
[取得] 数値情報取得
Definition: TnbAccessor.h:243
CStrVector QueryPluralStrings(void) const
[取得] 文字列群情報取得
Definition: TnbAccessor.h:214
EKind GetKind(void) const
[取得] 情報取種取得
Definition: TnbAccessor.h:171
void LoadCollection(const IReader &rr, LPCTSTR lpszHead, CVectorT< BYTE > &_vb)
[保存] コレクション読み込み
Definition: TnbFile.h:763
void SaveCollection(IWriter &wr, LPCTSTR lpszHead, const ISequenceCollectionT< BYTE > &c)
[保存] BYTEコレクション書き込み
Definition: TnbFile.h:707
ISerializer & operator<<(ISerializer &_sr, const CBitSet &t)
[追加] シリアライズ
Definition: TnbBitSet.h:677
const IDeserializer & operator>>(const IDeserializer &ds, CBitSet &_t)
[取得] デシリアライズ
Definition: TnbBitSet.h:690
TNB Library
Definition: TnbDoxyTitle.txt:2
@ EK_String
文字列
Definition: TnbAccessor.h:82
@ EK_Binary
バイナリ
Definition: TnbAccessor.h:84
@ EK_Dword
32Bit Unsigned Integer
Definition: TnbAccessor.h:85
@ EK_PluralStrings
複数の文字列群
Definition: TnbAccessor.h:83
@ EK_Nothing
存在しない
Definition: TnbAccessor.h:81
@ EK_Longlong
64Bit Signed Integer
Definition: TnbAccessor.h:86
デシリアライザーインターフェースクラス.
シリアライザーインターフェースクラス.