⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 deskey.cpp

📁 DES算法原理及实现,实现了3DES和DES的程序过程
💻 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 + -