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

📄 sha_512dlg.cpp

📁 SHA12加解密算法~~~~~~ 密码学课程设计
💻 CPP
字号:
// sha_512Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "sha_512.h"
#include "sha_512Dlg.h"
#include "sha_table.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

unsigned __int64 yi0 ( unsigned __int64 nn ) ;
unsigned __int64 yi1 ( unsigned __int64 nn ) ;
unsigned __int64 rotr ( unsigned __int64 nn , int ci ) ;
unsigned __int64 shr ( unsigned __int64 nn , int ci ) ;
unsigned __int64 ch ( unsigned __int64 e , unsigned __int64 f , unsigned __int64 g ) ;
unsigned __int64 yy0 ( unsigned __int64 nn ) ;
unsigned __int64 yy1 ( unsigned __int64 nn ) ;
unsigned __int64 maj ( unsigned __int64 a , unsigned __int64 b , unsigned __int64 c ) ;
class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSha_512Dlg dialog

CSha_512Dlg::CSha_512Dlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSha_512Dlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSha_512Dlg)
	m_hash = _T("");
	m_mess = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSha_512Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSha_512Dlg)
	DDX_Text(pDX, IDC_HAS, m_hash);
	DDX_Text(pDX, IDC_Message, m_mess);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CSha_512Dlg, CDialog)
	//{{AFX_MSG_MAP(CSha_512Dlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_OPEN, OnOpen)
	ON_BN_CLICKED(IDC_HASH, OnHash)
	ON_BN_CLICKED(IDC_EXIT, OnExit)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSha_512Dlg message handlers

BOOL CSha_512Dlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CSha_512Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CSha_512Dlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CSha_512Dlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CSha_512Dlg::OnOpen() 
{
	// TODO: Add your control notification handler code here
	UpdateData ( true ) ;
	CFileDialog fileDlg ( TRUE ) ;	
	fileDlg.m_ofn.lpstrTitle = "Select which you want to encryption" ;
	fileDlg.m_ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0" ;
	if ( IDOK == fileDlg.DoModal())
	{	CFile file(fileDlg.GetFileName() , CFile::modeRead ) ;
		char *pBuf ;
		DWORD dwFileLen ;
		dwFileLen = file.GetLength() ;
		pBuf = new char[dwFileLen+1] ;
		pBuf[dwFileLen] = 0 ;
		file.Read ( pBuf , dwFileLen ) ;
		file.Close () ;
		m_mess = pBuf ;
	}
	UpdateData ( false ) ;
	
}

void CSha_512Dlg::OnHash() 
{
	// TODO: Add your control notification handler code here
	UpdateData ( true ) ;
	unsigned __int64 w [ 80 ] ;
	unsigned __int64 h [ 8 ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ;
	unsigned __int64 a [ 8 ] ;


	unsigned __int64 l = strlen ( m_mess ) ;
	unsigned __int64 jia = l % 128 ;
	jia = 112 - jia ;
	if ( jia < 0 ) 
		jia += 128 ;
	jia += 16 ;
	unsigned __int64 ll = l + jia ;
	unsigned __int64 i = 0 ;
	unsigned __int64 j , k ;
	

	m_hash = "" ;
	while ( i < ll ) 
	{	int st= i ;
		k = 0 ;
		for ( j = 0 ; j < 8 ; j ++ ) 
		{
			a[j] = initial[j] ;

		}
	

		for ( ; i < st + 128 ; i += 8 , k ++ )
		{	if ( i == ll - 16 )
				w[k] = 0 ;
			else if ( i == ll - 8 ) 
			{	w[k] = l ;
			}
			else
			{	w[k] = 0 ;
				for ( j = i ; j < i + 8 ; j ++ ) 
				{	if ( j < l ) 
					{	int s = m_mess[int (j)] ;
						if ( s < 0 ) 
							s += 256 ;
						unsigned __int64 t = s ;
						
						w[k] = w[k] * 256 + t ;
					}
					else if ( j == l ) 
					{	w[k] = w[k] * 256 + 1 ;
					}
					else
						w[k] = w[k] * 256 ;
				}
			}
		}
		for ( ; k < 80 ; k ++ ) 
		{	
			w[k] = ( yi0 ( w[k - 2] ) ^ w[k - 7] ^ yi1 ( w[k - 15] ) ^ w[k - 16] ) ;
		}
		for ( k = 0 ; k < 80 ; k ++ ) 
		{	unsigned __int64 t1 = ( a[7] + ch ( a[4] , a[5] , a[6] ) + yy1 ( a[4] ) + w[k] + key[k] ) ; 
			unsigned __int64 t2 = ( yy0 ( a[0] ) + maj ( a[0] , a[1] , a[2] ) ) ;

			
			a[7] = a[6] ;
			a[6] = a[5] ;
			a[5] = a[4] ;
			a[4] = a[3] + t1 ;
			a[3] = a[2] ;
			a[2] = a[1] ;
			a[1] = a[0] ;
			a[0] = t1 + t2 ;
		}

		for ( j = 0 ; j < 8 ; j ++ ) 
		{	h[j] = ( h[j] + a[j] ) ;
		//	CString rr ;
		//	rr.Format ( "%20I64u" , h[j] ) ;
		//	m_hash += rr ;
		}
		//m_hash += "\r\n" ;
		
		
	}
	for ( i = 0 ; i < 8 ; i ++ ) 
	{	CString rr ;
		rr.Format ( "%I64u" , h[i] ) ;
		m_hash += rr ;
	}
	UpdateData ( false ) ;
	
}



unsigned __int64 yi0 ( unsigned __int64 nn ) 
{	return ( rotr ( nn , 1 ) ^ rotr ( nn , 8 ) ^ shr ( nn , 7 ) ) ;
}


unsigned __int64 yi1 ( unsigned __int64 nn ) 
{	return ( rotr ( nn , 19 ) ^ rotr ( nn , 61 ) ^ shr ( nn , 6 ) ) ;
}


unsigned __int64 rotr ( unsigned __int64 nn , int ci ) 
{	unsigned __int64 mo = 1 << ci ;
	unsigned __int64 gao = nn % mo ;
	unsigned __int64 di = nn / mo ;
	mo = 1 << ( 64 - ci ) ;
	return gao * mo + di ;
}


unsigned __int64 shr ( unsigned __int64 nn , int ci )
{	unsigned __int64 mo = 1 << ci ;
	return nn / mo * mo ;
}

unsigned __int64 ch ( unsigned __int64 e , unsigned __int64 f , unsigned __int64 g ) 
{	if ( e ) 
		return f;
	else 
		return g ;
}

unsigned __int64 yy0 ( unsigned __int64 nn ) 
{	return ( rotr ( nn , 28 ) ^ rotr ( nn , 34 ) ^ rotr ( nn , 39 ) ) ;
}

unsigned __int64 yy1 ( unsigned __int64 nn ) 
{	return ( rotr ( nn , 14 ) ^ rotr ( nn , 18 ) ^ rotr ( nn , 41 ) ) ;
}


unsigned __int64 maj ( unsigned __int64 a , unsigned __int64 b , unsigned __int64 c ) 
{	return ( ( a & b ) ^ ( a & c ) ^ ( b & c ) ) ; 
}

void CSha_512Dlg::OnExit() 
{
	// TODO: Add your control notification handler code here
	OnOK();
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -