📄 deskey.cpp
字号:
/*
* Implementation file for class of representing des keys
* Copyright (C) 2007 Stone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Contact me by stoneyrh@163.com
*
*/
#include "StdAfx.h"
#include "deskey.h"
deskey::key_t deskey::lo48(0XFFFFFFFFFFFFL);
size_t deskey::pmd1[] =
{
57,49,41,33,25,17,9,1,58,50,42,34,26,18,
10,2,59,51,43,35,27,19,11,3,60,52,44,36,
63,55,47,39,31,23,15,7,62,54,46,38,30,22,
14,6,61,53,45,37,29,21,13,5,28,20,12,4
};
size_t deskey::loop[] =
{
1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1
};
size_t deskey::pmd2[] =
{
14,17,11,24,1,5,3,28,15,6,21,10,
23,19,12,4,26,8,16,7,27,20,13,2,
41,52,31,37,47,55,30,40,51,45,33,48,
44,49,39,56,34,53,46,42,50,36,29,32
};
deskey::deskey(unsigned _int64 key)
{
genkey(key);
}
deskey::~deskey(void)
{
keys.clear();
}
void deskey::genkey(unsigned _int64 key)
{
//we know that keys can be generated only once
//keys.clear();
deskey::key_t set(key);
set.extract(deskey::pmd1,sizeof(deskey::pmd1) / sizeof(deskey::pmd1[0]));
for (size_t i = 0; i < 16; ++ i)
{
set.rotate_shift_left(0,27,deskey::loop[i]);
set.rotate_shift_left(28,55,deskey::loop[i]);
//get a copy the set
//because we need set at next loop
deskey::key_t cp(set);
cp.extract(deskey::pmd2,sizeof(deskey::pmd2) / sizeof(deskey::pmd2[0]));
//select low 48 bits as key
keys.push_back(cp & deskey::lo48);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -