59 return m_Shift(lpsz,
true);
70 return m_Shift(lpsz,
false);
84 static int ms_RangeShift(
int c,
int iShift,
int iMin,
int iMax)
86 ASSERTLIB(iMin < iMax);
87 if ( c < iMin || c > iMax )
91 int iRange = iMax - iMin;
98 iShift = -((-iShift) % iRange);
101 int iCode = (c - iMin) + iShift;
102 while ( iCode < 0x0000 )
106 while ( iCode >= iRange )
110 ASSERTLIB( (iCode + iMin) >= iMin && (iCode + iMin) < iMax );
122 static BYTE ms_ShiftChar(BYTE c,
int iShift)
124 int r = ms_RangeShift(c, iShift, 0x20, 0x80);
125 if ( r < 0 ) { r = ms_RangeShift(c, iShift, 0x81, 0x9F); }
126 if ( r < 0 ) { r = ms_RangeShift(c, iShift, 0xA0, 0xDF); }
127 if ( r < 0 ) { r = ms_RangeShift(c, iShift, 0xE0, 0xFB); }
128 return ( r < 0 ) ? c :
static_cast<BYTE
>(r);
138 CAscii m_Shift(LPCSTR lpsz,
bool boIsEnc)
const
142 ASSERT0(
false,
"CCipherData",
"暗号、復号キーが指定されていません。");
145 const BYTE* B =
reinterpret_cast<const BYTE*
>(LPCSTR(m_ascKey));
156 P[i] = ms_ShiftChar(lpsz[i], B[i % iKeySize]);
163 P[i] = ms_ShiftChar(lpsz[i], -B[i % iKeySize]);
#define loop(VAR, CNT)
loop構文.
bool IsEmpty(void) const
[確認] 空チェック
void ReleaseBuffer(void)
[操作] 割り当てたバッファを開放.
size_t GetLength(void) const
[取得] 文字列長
TYP * GetBuffer(size_t iLength=0)
[操作] 書き込みバッファ要求.
CAscii Encode(LPCSTR lpsz) const
[設定] 暗号化
void SetKey(const CAscii &ascKey)
[設定] キー設定.
CAscii Decode(LPCSTR lpsz) const
[設定] 復号化
size_t GetLen(LPCSTR lpsz)
[計算] 文字列長計算(ASCII/SJIS用)