├── .gitattributes ├── .gitignore ├── Entitlement.TemplateOSX32.xml ├── HashCalc.deployproj ├── HashCalc.dpr ├── HashCalc.dproj ├── HashCalc.res ├── OSX32 ├── Debug │ ├── HashCalc │ ├── HashCalc.entitlements │ └── HashCalc.info.plist └── Release │ ├── HashCalc │ ├── HashCalc.entitlements │ └── HashCalc.info.plist ├── OSX_SS.png ├── README.md ├── Win64_SS.png ├── frmMain.Macintosh.fmx ├── frmMain.Windows.fmx ├── frmMain.fmx └── frmMain.pas /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Uncomment these types if you want even more clean repository. But be careful. 2 | # It can make harm to an existing project source. Read explanations below. 3 | # 4 | # Resource files are binaries containing manifest, project icon and version info. 5 | # They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files. 6 | #*.res 7 | # 8 | # Type library file (binary). In old Delphi versions it should be stored. 9 | # Since Delphi 2009 it is produced from .ridl file and can safely be ignored. 10 | #*.tlb 11 | # 12 | # Diagram Portfolio file. Used by the diagram editor up to Delphi 7. 13 | # Uncomment this if you are not using diagrams or use newer Delphi version. 14 | #*.ddp 15 | # 16 | # Visual LiveBindings file. Added in Delphi XE2. 17 | # Uncomment this if you are not using LiveBindings Designer. 18 | #*.vlb 19 | # 20 | # Deployment Manager configuration file for your project. Added in Delphi XE2. 21 | # Uncomment this if it is not mobile development and you do not use remote debug feature. 22 | #*.deployproj 23 | # 24 | 25 | # Delphi compiler-generated binaries (safe to delete) 26 | *.exe 27 | *.dll 28 | *.bpl 29 | *.bpi 30 | *.dcp 31 | *.so 32 | *.apk 33 | *.drc 34 | *.map 35 | *.dres 36 | *.rsm 37 | *.tds 38 | *.dcu 39 | *.lib 40 | 41 | # Delphi autogenerated files (duplicated info) 42 | *.cfg 43 | *Resource.rc 44 | 45 | # Delphi local files (user-specific info) 46 | *.local 47 | *.identcache 48 | *.projdata 49 | *.tvsconfig 50 | *.dsk 51 | 52 | # Delphi history and backups 53 | __history/ 54 | *.~* 55 | 56 | # ========================= 57 | # Operating System Files 58 | # ========================= 59 | 60 | # OSX 61 | # ========================= 62 | 63 | .DS_Store 64 | .AppleDouble 65 | .LSOverride 66 | 67 | # Thumbnails 68 | ._* 69 | 70 | # Files that might appear on external disk 71 | .Spotlight-V100 72 | .Trashes 73 | 74 | # Directories potentially created on remote AFP share 75 | .AppleDB 76 | .AppleDesktop 77 | Network Trash Folder 78 | Temporary Items 79 | .apdisk 80 | 81 | # Windows 82 | # ========================= 83 | 84 | # Windows image file caches 85 | Thumbs.db 86 | ehthumbs.db 87 | 88 | # Folder config file 89 | Desktop.ini 90 | 91 | # Recycle Bin used on file shares 92 | $RECYCLE.BIN/ 93 | 94 | # Windows Installer files 95 | *.cab 96 | *.msi 97 | *.msm 98 | *.msp 99 | 100 | # Windows shortcuts 101 | *.lnk 102 | -------------------------------------------------------------------------------- /Entitlement.TemplateOSX32.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | <%appSandboxKeys%> 6 | 7 | 8 | -------------------------------------------------------------------------------- /HashCalc.deployproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 12 5 | 6 | 7 | 8 | 9 | 10 | HashCalc\ 11 | HashCalc.exe 12 | 0 13 | 14 | 15 | True 16 | True 17 | 18 | 19 | 20 | 21 | HashCalc.app\Contents\MacOS\ 22 | libcgunwind.1.0.dylib 23 | 1 24 | 25 | 26 | True 27 | 28 | 29 | HashCalc.app\Contents\MacOS\ 30 | HashCalc 31 | 1 32 | 33 | 34 | True 35 | True 36 | 37 | 38 | HashCalc.app\Contents\Resources\ 39 | HashCalc.icns 40 | 1 41 | 42 | 43 | True 44 | 45 | 46 | HashCalc.app\../\ 47 | HashCalc.entitlements 48 | 1 49 | 50 | 51 | True 52 | 53 | 54 | HashCalc.app\Contents\ 55 | Info.plist 56 | 1 57 | 58 | 59 | True 60 | 61 | 62 | HashCalc.app\Contents\Resources\ 63 | HashCalc.icns 64 | 1 65 | 66 | 67 | True 68 | 69 | 70 | HashCalc.app\../\ 71 | HashCalc.entitlements 72 | 1 73 | 74 | 75 | True 76 | 77 | 78 | HashCalc.app\Contents\MacOS\ 79 | HashCalc 80 | 1 81 | 82 | 83 | True 84 | True 85 | 86 | 87 | HashCalc.app\Contents\ 88 | Info.plist 89 | 1 90 | 91 | 92 | True 93 | 94 | 95 | 96 | 97 | HashCalc.app\ 98 | libcgunwind.1.0.dylib 99 | 1 100 | 101 | 102 | True 103 | 104 | 105 | 106 | 107 | HashCalc\ 108 | HashCalc 109 | 0 110 | 111 | 112 | True 113 | True 114 | 115 | 116 | HashCalc\ 117 | HashCalc.exe 118 | 0 119 | 120 | 121 | True 122 | True 123 | 124 | 125 | 126 | -------------------------------------------------------------------------------- /HashCalc.dpr: -------------------------------------------------------------------------------- 1 | program HashCalc; 2 | 3 | uses 4 | System.StartUpCopy, 5 | FMX.Forms, 6 | frmMain in 'frmMain.pas' {Form1}; 7 | 8 | {$R *.res} 9 | 10 | begin 11 | Application.Initialize; 12 | Application.CreateForm(TForm1, Form1); 13 | Application.Run; 14 | end. 15 | -------------------------------------------------------------------------------- /HashCalc.dproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | {59BF3AB1-FF70-4A67-8757-CE0ADE5EFDB1} 4 | 16.1 5 | FMX 6 | HashCalc.dpr 7 | True 8 | Release 9 | OSX32 10 | 7 11 | Application 12 | 13 | 14 | true 15 | 16 | 17 | true 18 | Base 19 | true 20 | 21 | 22 | true 23 | Base 24 | true 25 | 26 | 27 | true 28 | Base 29 | true 30 | 31 | 32 | true 33 | Base 34 | true 35 | 36 | 37 | true 38 | Base 39 | true 40 | 41 | 42 | true 43 | Base 44 | true 45 | 46 | 47 | true 48 | Base 49 | true 50 | 51 | 52 | true 53 | Cfg_1 54 | true 55 | true 56 | 57 | 58 | true 59 | Cfg_1 60 | true 61 | true 62 | 63 | 64 | true 65 | Cfg_1 66 | true 67 | true 68 | 69 | 70 | true 71 | Base 72 | true 73 | 74 | 75 | true 76 | Cfg_2 77 | true 78 | true 79 | 80 | 81 | true 82 | Cfg_2 83 | true 84 | true 85 | 86 | 87 | true 88 | Cfg_2 89 | true 90 | true 91 | 92 | 93 | true 94 | true 95 | $(BDS)\bin\delphi_PROJECTICON.ico 96 | true 97 | true 98 | true 99 | true 100 | true 101 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) 102 | $(BDS)\bin\delphi_PROJECTICNS.icns 103 | HashCalc 104 | true 105 | true 106 | true 107 | .\$(Platform)\$(Config) 108 | .\$(Platform)\$(Config) 109 | false 110 | false 111 | false 112 | false 113 | false 114 | 115 | 116 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png 117 | FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;fmx;IndySystem;tethering;DBXInterBaseDriver;DataSnapClient;DataSnapCommon;DataSnapProviderClient;DbxCommonDriver;dbxcds;fmxFireDAC;CustomIPTransport;dsnap;IndyIPServer;IndyCore;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;dsnapxml;bindcompfmx;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;xmlrtl;DataSnapNativeClient;ibxpress;IndyProtocols;FireDACCommonDriver;bindengine;bindcompdbx;soaprtl;FMXTee;emsclient;FireDAC;inet;soapmidas;RESTComponents;dbexpress;IndyIPClient;$(DCC_UsePackage) 118 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png 119 | true 120 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png 121 | $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png 122 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png 123 | $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png 124 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png 125 | $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png 126 | package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=preferExternal;largeHeap=False;theme=TitleBar;hardwareAccelerated=true 127 | Debug 128 | $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png 129 | 130 | 131 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png 132 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_144x144.png 133 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_100x100.png 134 | FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;fmx;IndySystem;tethering;DBXInterBaseDriver;DataSnapClient;DataSnapCommon;DataSnapProviderClient;DbxCommonDriver;dbxcds;fmxFireDAC;CustomIPTransport;dsnap;IndyIPServer;fmxase;IndyCore;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;dsnapxml;bindcompfmx;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;xmlrtl;DataSnapNativeClient;ibxpress;IndyProtocols;FireDACCommonDriver;bindengine;bindcompdbx;soaprtl;FMXTee;emsclient;FireDAC;inet;soapmidas;RESTComponents;dbexpress;IndyIPClient;$(DCC_UsePackage) 135 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png 136 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1496.png 137 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_57x57.png 138 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2008.png 139 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png 140 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x1136.png 141 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png 142 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png 143 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png 144 | true 145 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png 146 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png 147 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png 148 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1004.png 149 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png 150 | iPhoneAndiPad 151 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_29x29.png 152 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png 153 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png 154 | Debug 155 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_114x114.png 156 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png 157 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png 158 | $(MSBuildProjectName) 159 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_50x50.png 160 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png 161 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x960.png 162 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png 163 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_320x480.png 164 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png 165 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png 166 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png 167 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x748.png 168 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist 169 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png 170 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png 171 | 172 | 173 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_100x100.png 174 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png 175 | FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;fmx;IndySystem;tethering;DBXInterBaseDriver;DataSnapClient;DataSnapCommon;DataSnapProviderClient;DbxCommonDriver;dbxcds;fmxFireDAC;CustomIPTransport;dsnap;IndyIPServer;fmxase;IndyCore;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;dsnapxml;bindcompfmx;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;xmlrtl;DataSnapNativeClient;ibxpress;IndyProtocols;FireDACCommonDriver;bindengine;bindcompdbx;soaprtl;FMXTee;emsclient;FireDAC;inet;soapmidas;RESTComponents;dbexpress;IndyIPClient;$(DCC_UsePackage) 176 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png 177 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_144x144.png 178 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2008.png 179 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1496.png 180 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png 181 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x1136.png 182 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png 183 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png 184 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png 185 | true 186 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png 187 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png 188 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1004.png 189 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png 190 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png 191 | iPhoneAndiPad 192 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png 193 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_29x29.png 194 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x748.png 195 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_114x114.png 196 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png 197 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png 198 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png 199 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_50x50.png 200 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png 201 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png 202 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png 203 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_320x480.png 204 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_57x57.png 205 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png 206 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x960.png 207 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png 208 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist 209 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png 210 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png 211 | 212 | 213 | true 214 | FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;FireDACPgDriver;fmx;IndySystem;tethering;DBXInterBaseDriver;DataSnapClient;DataSnapServer;DataSnapCommon;DataSnapProviderClient;DbxCommonDriver;dbxcds;fmxFireDAC;DBXOracleDriver;CustomIPTransport;dsnap;IndyIPServer;fmxase;IndyCore;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;inetdbxpress;dsnapxml;FireDACASADriver;bindcompfmx;FireDACODBCDriver;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;inetdb;xmlrtl;DataSnapNativeClient;ibxpress;IndyProtocols;DBXMySQLDriver;FireDACCommonDriver;bindengine;bindcompdbx;soaprtl;FMXTee;emsclient;FireDACMSSQLDriver;FireDAC;DBXInformixDriver;DataSnapServerMidas;DBXFirebirdDriver;inet;fmxobj;FireDACMySQLDriver;soapmidas;DBXSybaseASADriver;FireDACOracleDriver;fmxdae;RESTComponents;dbexpress;DataSnapIndy10ServerTransport;IndyIPClient;$(DCC_UsePackage) 215 | CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities 216 | 217 | 218 | 1033 219 | TMSFMXChartPkgDEDXE7;FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;FireDACPgDriver;fmx;IndySystem;frxe21;TeeDB;tethering;TMSFMXWebOSMapsPkgDXE7;vcwdXE7;aqueryxe7;vclib;DBXInterBaseDriver;DataSnapClient;DataSnapServer;DataSnapCommon;frx21;DataSnapProviderClient;DBXSybaseASEDriver;DbxCommonDriver;vclimg;dbxcds;DatasnapConnectorsFreePascal;MetropolisUILiveTile;TMSFMXPackPkgDXE7;vcldb;vcldsnap;fmxFireDAC;DBXDb2Driver;DBXOracleDriver;CustomIPTransport;vclribbon;dsnap;IndyIPServer;fmxase;vcl;IndyCore;TMSFMXPackPkgDEDXE7;DBXMSSQLDriver;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;CodeSiteExpressPkg;DataSnapFireDAC;FireDACDBXDriver;soapserver;tmsdXE7;inetdbxpress;dsnapxml;FireDACInfxDriver;FireDACDb2Driver;TMSFMXChartPkgDXE7;adortl;tmswizdXE7;FireDACASADriver;TMSiCLPkgDXE7;bindcompfmx;FireDACODBCDriver;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;inetdb;frxTee21;Tee;DBXOdbcDriver;TMSFMXCloudPackPkgDXE7;frxDB21;vclFireDAC;xmlrtl;DataSnapNativeClient;svnui;ibxpress;IndyProtocols;DBXMySQLDriver;FireDACCommonDriver;bindengine;vclactnband;bindcompdbx;soaprtl;FMXTee;TeeUI;bindcompvcl;vclie;FireDACADSDriver;vcltouch;TMSFMXWebGMapsPkgDXE7;TMSmCLPkgDXE7;emsclient;VCLRESTComponents;FireDACMSSQLDriver;FireDAC;VclSmp;DBXInformixDriver;Intraweb;DataSnapConnectors;DataSnapServerMidas;dsnapcon;DBXFirebirdDriver;tmsexdXE7;inet;fmxobj;FireDACMySQLDriver;soapmidas;vclx;tmsxlsdXE7;svn;DBXSybaseASADriver;FireDACOracleDriver;fmxdae;RESTComponents;FireDACMSAccDriver;dbexpress;DataSnapIndy10ServerTransport;IndyIPClient;$(DCC_UsePackage) 220 | true 221 | $(BDS)\bin\default_app.manifest 222 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 223 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= 224 | 225 | 226 | 1033 227 | FireDACSqliteDriver;FireDACDSDriver;DBXSqliteDriver;FireDACPgDriver;fmx;IndySystem;TeeDB;tethering;vclib;DBXInterBaseDriver;DataSnapClient;DataSnapServer;DataSnapCommon;DataSnapProviderClient;DBXSybaseASEDriver;DbxCommonDriver;vclimg;dbxcds;DatasnapConnectorsFreePascal;MetropolisUILiveTile;vcldb;vcldsnap;fmxFireDAC;DBXDb2Driver;DBXOracleDriver;CustomIPTransport;vclribbon;dsnap;IndyIPServer;fmxase;vcl;IndyCore;DBXMSSQLDriver;IndyIPCommon;CloudService;FmxTeeUI;FireDACIBDriver;DataSnapFireDAC;FireDACDBXDriver;soapserver;tmsdXE7;inetdbxpress;dsnapxml;FireDACInfxDriver;FireDACDb2Driver;adortl;FireDACASADriver;bindcompfmx;FireDACODBCDriver;RESTBackendComponents;emsclientfiredac;rtl;dbrtl;DbxClientDriver;FireDACCommon;bindcomp;inetdb;Tee;DBXOdbcDriver;vclFireDAC;xmlrtl;DataSnapNativeClient;ibxpress;IndyProtocols;DBXMySQLDriver;FireDACCommonDriver;bindengine;vclactnband;bindcompdbx;soaprtl;FMXTee;TeeUI;bindcompvcl;vclie;FireDACADSDriver;vcltouch;emsclient;VCLRESTComponents;FireDACMSSQLDriver;FireDAC;VclSmp;DBXInformixDriver;Intraweb;DataSnapConnectors;DataSnapServerMidas;dsnapcon;DBXFirebirdDriver;tmsexdXE7;inet;fmxobj;FireDACMySQLDriver;soapmidas;vclx;DBXSybaseASADriver;FireDACOracleDriver;fmxdae;RESTComponents;FireDACMSAccDriver;dbexpress;DataSnapIndy10ServerTransport;IndyIPClient;$(DCC_UsePackage) 228 | true 229 | $(BDS)\bin\default_app.manifest 230 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) 231 | CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= 232 | 233 | 234 | DEBUG;$(DCC_Define) 235 | true 236 | false 237 | true 238 | true 239 | true 240 | 241 | 242 | /usr/X11/bin/xterm -e "%debuggee%" 243 | true 244 | None 245 | C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt;C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt\Hashes;$(DCC_UnitSearchPath) 246 | 247 | 248 | false 249 | 250 | 251 | true 252 | C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt;C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt\Hashes;$(DCC_UnitSearchPath) 253 | 1033 254 | 255 | 256 | false 257 | RELEASE;$(DCC_Define) 258 | 0 259 | 0 260 | 261 | 262 | None 263 | true 264 | C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt;C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt\Hashes;$(DCC_UnitSearchPath) 265 | /usr/X11/bin/xterm -e "%debuggee%" 266 | 267 | 268 | 1033 269 | true 270 | C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt;C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt\Hashes;$(DCC_UnitSearchPath) 271 | 272 | 273 | 1033 274 | true 275 | C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt;C:\Users\Stephen Genusa\Documents\Embarcadero\Studio\Projects\dcpcrypt\Hashes;$(DCC_UnitSearchPath) 276 | 277 | 278 | 279 | MainSource 280 | 281 | 282 |
Form1
283 | fmx 284 |
285 | 286 | Cfg_2 287 | Base 288 | 289 | 290 | Base 291 | 292 | 293 | Cfg_1 294 | Base 295 | 296 |
297 | 298 | Delphi.Personality.12 299 | Application 300 | 301 | 302 | 303 | HashCalc.dpr 304 | 305 | 306 | Embarcadero C++Builder Office 2000 Servers Package 307 | Embarcadero C++Builder Office XP Servers Package 308 | Microsoft Office 2000 Sample Automation Server Wrapper Components 309 | Microsoft Office XP Sample Automation Server Wrapper Components 310 | 311 | 312 | 313 | 314 | 315 | true 316 | 317 | 318 | true 319 | 320 | 321 | 322 | 323 | HashCalc 324 | true 325 | 326 | 327 | 328 | 329 | HashCalc.icns 330 | true 331 | 332 | 333 | 334 | 335 | true 336 | 337 | 338 | 339 | 340 | Info.plist 341 | true 342 | 343 | 344 | 345 | 346 | HashCalc 347 | true 348 | 349 | 350 | 351 | 352 | HashCalc.icns 353 | true 354 | 355 | 356 | 357 | 358 | true 359 | 360 | 361 | 362 | 363 | HashCalc.exe 364 | true 365 | 366 | 367 | 368 | 369 | HashCalc 370 | true 371 | 372 | 373 | 374 | 375 | Info.plist 376 | true 377 | 378 | 379 | 380 | 381 | HashCalc.exe 382 | true 383 | 384 | 385 | 386 | 387 | 1 388 | .dylib 389 | 390 | 391 | 0 392 | .bpl 393 | 394 | 395 | Contents\MacOS 396 | 1 397 | .dylib 398 | 399 | 400 | 1 401 | .dylib 402 | 403 | 404 | 405 | 406 | 1 407 | .dylib 408 | 409 | 410 | 0 411 | .dll;.bpl 412 | 413 | 414 | Contents\MacOS 415 | 1 416 | .dylib 417 | 418 | 419 | 1 420 | .dylib 421 | 422 | 423 | 424 | 425 | 1 426 | 427 | 428 | 1 429 | 430 | 431 | 432 | 433 | Contents 434 | 1 435 | 436 | 437 | 438 | 439 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 440 | 1 441 | 442 | 443 | 444 | 445 | res\drawable-normal 446 | 1 447 | 448 | 449 | 450 | 451 | library\lib\x86 452 | 1 453 | 454 | 455 | 456 | 457 | 1 458 | 459 | 460 | 1 461 | 462 | 463 | 464 | 465 | ../ 466 | 1 467 | 468 | 469 | 470 | 471 | library\lib\armeabi-v7a 472 | 1 473 | 474 | 475 | 476 | 477 | 1 478 | 479 | 480 | 1 481 | 482 | 483 | 484 | 485 | res\drawable-xlarge 486 | 1 487 | 488 | 489 | 490 | 491 | res\drawable-xhdpi 492 | 1 493 | 494 | 495 | 496 | 497 | 1 498 | 499 | 500 | 1 501 | 502 | 503 | 504 | 505 | res\drawable-xxhdpi 506 | 1 507 | 508 | 509 | 510 | 511 | library\lib\mips 512 | 1 513 | 514 | 515 | 516 | 517 | res\drawable 518 | 1 519 | 520 | 521 | 522 | 523 | Contents\MacOS 524 | 1 525 | 526 | 527 | 1 528 | 529 | 530 | 0 531 | 532 | 533 | 534 | 535 | Contents\MacOS 536 | 1 537 | .framework 538 | 539 | 540 | 0 541 | 542 | 543 | 544 | 545 | res\drawable-small 546 | 1 547 | 548 | 549 | 550 | 551 | ../ 552 | 1 553 | 554 | 555 | 556 | 557 | Contents\MacOS 558 | 1 559 | 560 | 561 | 1 562 | 563 | 564 | Contents\MacOS 565 | 0 566 | 567 | 568 | 569 | 570 | classes 571 | 1 572 | 573 | 574 | 575 | 576 | 1 577 | 578 | 579 | 1 580 | 581 | 582 | 583 | 584 | 1 585 | 586 | 587 | 1 588 | 589 | 590 | 591 | 592 | res\drawable 593 | 1 594 | 595 | 596 | 597 | 598 | Contents\Resources 599 | 1 600 | 601 | 602 | 603 | 604 | 1 605 | 606 | 607 | 608 | 609 | 1 610 | 611 | 612 | 1 613 | 614 | 615 | 616 | 617 | 1 618 | 619 | 620 | library\lib\armeabi-v7a 621 | 1 622 | 623 | 624 | 0 625 | 626 | 627 | Contents\MacOS 628 | 1 629 | 630 | 631 | 1 632 | 633 | 634 | 635 | 636 | library\lib\armeabi 637 | 1 638 | 639 | 640 | 641 | 642 | res\drawable-large 643 | 1 644 | 645 | 646 | 647 | 648 | 0 649 | 650 | 651 | 0 652 | 653 | 654 | 0 655 | 656 | 657 | Contents\MacOS 658 | 0 659 | 660 | 661 | 0 662 | 663 | 664 | 665 | 666 | 1 667 | 668 | 669 | 1 670 | 671 | 672 | 673 | 674 | res\drawable-ldpi 675 | 1 676 | 677 | 678 | 679 | 680 | res\values 681 | 1 682 | 683 | 684 | 685 | 686 | 1 687 | 688 | 689 | 1 690 | 691 | 692 | 693 | 694 | res\drawable-mdpi 695 | 1 696 | 697 | 698 | 699 | 700 | res\drawable-hdpi 701 | 1 702 | 703 | 704 | 705 | 706 | 1 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | False 718 | False 719 | False 720 | True 721 | True 722 | True 723 | 724 | 725 | 12 726 | 727 | 728 | 729 | 730 |
731 | -------------------------------------------------------------------------------- /HashCalc.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StephenGenusa/HashCalc/f659f6114ecacee50455278469e4fdf170859877/HashCalc.res -------------------------------------------------------------------------------- /OSX32/Debug/HashCalc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StephenGenusa/HashCalc/f659f6114ecacee50455278469e4fdf170859877/OSX32/Debug/HashCalc -------------------------------------------------------------------------------- /OSX32/Debug/HashCalc.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /OSX32/Debug/HashCalc.info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleName 6 | HashCalc 7 | CFBundleDisplayName 8 | HashCalc 9 | CFBundleIdentifier 10 | HashCalc 11 | CFBundleVersion 12 | 1.0.0 13 | CFBundlePackageType 14 | APPL 15 | CFBundleSignature 16 | ???? 17 | CFBundleAllowMixedLocalizations 18 | YES 19 | CFBundleExecutable 20 | HashCalc 21 | NSHighResolutionCapable 22 | true 23 | LSApplicationCategoryType 24 | public.app-category.utilities 25 | UISupportedInterfaceOrientations 26 | 27 | UIInterfaceOrientationPortrait 28 | UIInterfaceOrientationPortraitUpsideDown 29 | UIInterfaceOrientationLandscapeLeft 30 | UIInterfaceOrientationLandscapeRight 31 | 32 | UISupportedInterfaceOrientations~ipad 33 | 34 | UIInterfaceOrientationPortrait 35 | UIInterfaceOrientationPortraitUpsideDown 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | CFBundleShortVersionString 40 | 1.0 41 | CFBundleIconFile 42 | HashCalc.icns 43 | UILaunchImages 44 | 45 | 46 | UILaunchImageSize 47 | {320, 480} 48 | UILaunchImageName 49 | Default 50 | UILaunchImageMinimumOSVersion 51 | 8.0 52 | UILaunchImageOrientation 53 | Portrait 54 | 55 | 56 | UILaunchImageSize 57 | {320, 568} 58 | UILaunchImageName 59 | Default-568h 60 | UILaunchImageMinimumOSVersion 61 | 8.0 62 | UILaunchImageOrientation 63 | Portrait 64 | 65 | 66 | UILaunchImageSize 67 | {414, 736} 68 | UILaunchImageName 69 | Default-736h 70 | UILaunchImageMinimumOSVersion 71 | 8.0 72 | UILaunchImageOrientation 73 | Portrait 74 | 75 | 76 | UILaunchImageSize 77 | {414, 736} 78 | UILaunchImageName 79 | Default-Landscape-736h 80 | UILaunchImageMinimumOSVersion 81 | 8.0 82 | UILaunchImageOrientation 83 | Landscape 84 | 85 | 86 | UILaunchImageSize 87 | {375, 667} 88 | UILaunchImageName 89 | Default-667h 90 | UILaunchImageMinimumOSVersion 91 | 8.0 92 | UILaunchImageOrientation 93 | Portrait 94 | 95 | 96 | UILaunchImages~ipad 97 | 98 | 99 | UILaunchImageSize 100 | {768, 1024} 101 | UILaunchImageName 102 | Default-Portrait 103 | UILaunchImageMinimumOSVersion 104 | 8.0 105 | UILaunchImageOrientation 106 | Portrait 107 | 108 | 109 | UILaunchImageSize 110 | {768, 1024} 111 | UILaunchImageName 112 | Default-Landscape 113 | UILaunchImageMinimumOSVersion 114 | 8.0 115 | UILaunchImageOrientation 116 | Landscape 117 | 118 | 119 | UILaunchImageSize 120 | {1536, 2048} 121 | UILaunchImageName 122 | Default-Portrait 123 | UILaunchImageMinimumOSVersion 124 | 8.0 125 | UILaunchImageOrientation 126 | Portrait 127 | 128 | 129 | UILaunchImageSize 130 | {1536, 2048} 131 | UILaunchImageName 132 | Default-Landscape 133 | UILaunchImageMinimumOSVersion 134 | 8.0 135 | UILaunchImageOrientation 136 | Landscape 137 | 138 | 139 | 140 | 141 | -------------------------------------------------------------------------------- /OSX32/Release/HashCalc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StephenGenusa/HashCalc/f659f6114ecacee50455278469e4fdf170859877/OSX32/Release/HashCalc -------------------------------------------------------------------------------- /OSX32/Release/HashCalc.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /OSX32/Release/HashCalc.info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleName 6 | HashCalc 7 | CFBundleDisplayName 8 | HashCalc 9 | CFBundleIdentifier 10 | HashCalc 11 | CFBundleVersion 12 | 1.0.0 13 | CFBundlePackageType 14 | APPL 15 | CFBundleSignature 16 | ???? 17 | CFBundleAllowMixedLocalizations 18 | YES 19 | CFBundleExecutable 20 | HashCalc 21 | NSHighResolutionCapable 22 | true 23 | LSApplicationCategoryType 24 | public.app-category.utilities 25 | UISupportedInterfaceOrientations 26 | 27 | UIInterfaceOrientationPortrait 28 | UIInterfaceOrientationPortraitUpsideDown 29 | UIInterfaceOrientationLandscapeLeft 30 | UIInterfaceOrientationLandscapeRight 31 | 32 | UISupportedInterfaceOrientations~ipad 33 | 34 | UIInterfaceOrientationPortrait 35 | UIInterfaceOrientationPortraitUpsideDown 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | CFBundleShortVersionString 40 | 1.0 41 | CFBundleIconFile 42 | HashCalc.icns 43 | UILaunchImages 44 | 45 | 46 | UILaunchImageSize 47 | {320, 480} 48 | UILaunchImageName 49 | Default 50 | UILaunchImageMinimumOSVersion 51 | 8.0 52 | UILaunchImageOrientation 53 | Portrait 54 | 55 | 56 | UILaunchImageSize 57 | {320, 568} 58 | UILaunchImageName 59 | Default-568h 60 | UILaunchImageMinimumOSVersion 61 | 8.0 62 | UILaunchImageOrientation 63 | Portrait 64 | 65 | 66 | UILaunchImageSize 67 | {414, 736} 68 | UILaunchImageName 69 | Default-736h 70 | UILaunchImageMinimumOSVersion 71 | 8.0 72 | UILaunchImageOrientation 73 | Portrait 74 | 75 | 76 | UILaunchImageSize 77 | {414, 736} 78 | UILaunchImageName 79 | Default-Landscape-736h 80 | UILaunchImageMinimumOSVersion 81 | 8.0 82 | UILaunchImageOrientation 83 | Landscape 84 | 85 | 86 | UILaunchImageSize 87 | {375, 667} 88 | UILaunchImageName 89 | Default-667h 90 | UILaunchImageMinimumOSVersion 91 | 8.0 92 | UILaunchImageOrientation 93 | Portrait 94 | 95 | 96 | UILaunchImages~ipad 97 | 98 | 99 | UILaunchImageSize 100 | {768, 1024} 101 | UILaunchImageName 102 | Default-Portrait 103 | UILaunchImageMinimumOSVersion 104 | 8.0 105 | UILaunchImageOrientation 106 | Portrait 107 | 108 | 109 | UILaunchImageSize 110 | {768, 1024} 111 | UILaunchImageName 112 | Default-Landscape 113 | UILaunchImageMinimumOSVersion 114 | 8.0 115 | UILaunchImageOrientation 116 | Landscape 117 | 118 | 119 | UILaunchImageSize 120 | {1536, 2048} 121 | UILaunchImageName 122 | Default-Portrait 123 | UILaunchImageMinimumOSVersion 124 | 8.0 125 | UILaunchImageOrientation 126 | Portrait 127 | 128 | 129 | UILaunchImageSize 130 | {1536, 2048} 131 | UILaunchImageName 132 | Default-Landscape 133 | UILaunchImageMinimumOSVersion 134 | 8.0 135 | UILaunchImageOrientation 136 | Landscape 137 | 138 | 139 | 140 | 141 | -------------------------------------------------------------------------------- /OSX_SS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StephenGenusa/HashCalc/f659f6114ecacee50455278469e4fdf170859877/OSX_SS.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #HashCalc -- A File Hash Calculator for Win32, Win64 and OS X 2 | 3 | This is an experimental project using Embarcadero Delphi XE7. It also uses the [DCPCrypt](https://github.com/StephenGenusa/DCPCrypt) library for the hash functions. 4 | 5 | It will currently calculate file hashes for MD4, MD5, RIPEMD-128, RIPEMD-160, SHA1, SHA256, SHA384, SHA512, Tiger and Haval. 6 | 7 | You can drag-and-drop any file on the drop target of the form or you can give a single command-line parameter which is the path/filename. On OS X you'd probably want to create a link file pointing to /Applications/HashCalc.app/Contents/MacOS/HashCalc so that you can type hashcalc path/file 8 | 9 | There is also a Base64 text encoder and decoder on the second tab as a convenience tool. 10 | 11 | [Binaries](https://github.com/StephenGenusa/HashCalc/releases) are available for download. 12 | 13 | ![HashCalc OS X](https://raw.github.com/StephenGenusa/HashCalc/master/OSX_SS.png) 14 |
HashCalc on OS X 15 | 16 | ![HashCalc Windows](https://raw.github.com/StephenGenusa/HashCalc/master/Win64_SS.png) 17 |
HashCalc on Windows 18 | -------------------------------------------------------------------------------- /Win64_SS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StephenGenusa/HashCalc/f659f6114ecacee50455278469e4fdf170859877/Win64_SS.png -------------------------------------------------------------------------------- /frmMain.Macintosh.fmx: -------------------------------------------------------------------------------- 1 | inherited Form1_Macintosh: TForm1_Macintosh 2 | ClientHeight = 686 3 | ClientWidth = 804 4 | DesignerMasterStyle = 1 5 | inherited Button1: TButton 6 | Position.X = 648.000000000000000000 7 | Position.Y = 600.000000000000000000 8 | OnClick = Button1Click 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /frmMain.Windows.fmx: -------------------------------------------------------------------------------- 1 | inherited Form1_Windows: TForm1_Windows 2 | Caption = 'Stephen Genusa'#39's Hash Calculator' 3 | ClientHeight = 603 4 | ClientWidth = 713 5 | DesignerMasterStyle = 1 6 | inherited Button1: TButton 7 | OnClick = Button1Click 8 | end 9 | inherited DropTarget1: TDropTarget 10 | Filter = '*' 11 | Position.X = 264.000000000000000000 12 | Position.Y = 32.000000000000000000 13 | Text = 'Drop File Here' 14 | OnDragOver = DropTarget1DragOver 15 | OnDropped = DropTarget1Dropped 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /frmMain.fmx: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 0 3 | Top = 0 4 | BorderStyle = Single 5 | Caption = 'Stephen Genusa'#39's Hash Calculator and Base64 Utility' 6 | ClientHeight = 686 7 | ClientWidth = 851 8 | Position = ScreenCenter 9 | FormFactor.Width = 320 10 | FormFactor.Height = 480 11 | FormFactor.Devices = [Desktop] 12 | OnCreate = FormCreate 13 | DesignerMasterStyle = 0 14 | object tabBase64: TTabControl 15 | Position.X = 8.000000000000000000 16 | Position.Y = 8.000000000000000000 17 | Size.Width = 833.000000000000000000 18 | Size.Height = 673.000000000000000000 19 | Size.PlatformDefault = False 20 | TabIndex = 0 21 | TabOrder = 0 22 | TabPosition = PlatformDefault 23 | object TabItem1: TTabItem 24 | CustomIcon = < 25 | item 26 | end> 27 | IsSelected = True 28 | Size.Width = 84.000000000000000000 29 | Size.Height = 24.000000000000000000 30 | Size.PlatformDefault = False 31 | TabOrder = 0 32 | Text = 'File Hashing' 33 | object DropTarget1: TDropTarget 34 | Filter = '*.*' 35 | Position.X = 32.000000000000000000 36 | Position.Y = 32.000000000000000000 37 | Size.Width = 769.000000000000000000 38 | Size.Height = 120.000000000000000000 39 | Size.PlatformDefault = False 40 | TabOrder = 0 41 | Text = 'Drop File Here' 42 | OnDragOver = DropTarget1DragOver 43 | OnDropped = DropTarget1Dropped 44 | end 45 | object edtMD5Hash: TEdit 46 | Touch.InteractiveGestures = [LongTap, DoubleTap] 47 | TabOrder = 2 48 | Position.X = 110.000000000000000000 49 | Position.Y = 272.000000000000000000 50 | Size.Width = 700.000000000000000000 51 | Size.Height = 22.000000000000000000 52 | Size.PlatformDefault = False 53 | end 54 | object lblMD5: TLabel 55 | Position.X = 5.000000000000000000 56 | Position.Y = 272.000000000000000000 57 | Size.Width = 101.000000000000000000 58 | Size.Height = 17.000000000000000000 59 | Size.PlatformDefault = False 60 | Text = 'MD5:' 61 | end 62 | object lblFilename: TLabel 63 | StyledSettings = [Family, Size, FontColor] 64 | Position.X = 112.000000000000000000 65 | Position.Y = 176.000000000000000000 66 | Size.Width = 697.000000000000000000 67 | Size.Height = 57.000000000000000000 68 | Size.PlatformDefault = False 69 | TextSettings.Font.Style = [fsBold] 70 | Text = 'n/a' 71 | end 72 | object edtSHA1Hash: TEdit 73 | Touch.InteractiveGestures = [LongTap, DoubleTap] 74 | TabOrder = 9 75 | Position.X = 110.000000000000000000 76 | Position.Y = 368.000000000000000000 77 | Size.Width = 700.000000000000000000 78 | Size.Height = 22.000000000000000000 79 | Size.PlatformDefault = False 80 | end 81 | object lblSHA1: TLabel 82 | Position.X = 5.000000000000000000 83 | Position.Y = 368.000000000000000000 84 | Size.Width = 101.000000000000000000 85 | Size.Height = 17.000000000000000000 86 | Size.PlatformDefault = False 87 | Text = 'SHA1:' 88 | end 89 | object edtSHA256Hash: TEdit 90 | Touch.InteractiveGestures = [LongTap, DoubleTap] 91 | TabOrder = 21 92 | Position.X = 110.000000000000000000 93 | Position.Y = 400.000000000000000000 94 | Size.Width = 700.000000000000000000 95 | Size.Height = 22.000000000000000000 96 | Size.PlatformDefault = False 97 | end 98 | object lblSHA256: TLabel 99 | Position.X = 5.000000000000000000 100 | Position.Y = 400.000000000000000000 101 | Size.Width = 101.000000000000000000 102 | Size.Height = 17.000000000000000000 103 | Size.PlatformDefault = False 104 | Text = 'SHA256:' 105 | end 106 | object lblSHA384: TLabel 107 | Position.X = 5.000000000000000000 108 | Position.Y = 432.000000000000000000 109 | Size.Width = 101.000000000000000000 110 | Size.Height = 17.000000000000000000 111 | Size.PlatformDefault = False 112 | Text = 'SHA384:' 113 | end 114 | object lblSHA512: TLabel 115 | Position.X = 5.000000000000000000 116 | Position.Y = 496.000000000000000000 117 | Size.Width = 101.000000000000000000 118 | Size.Height = 17.000000000000000000 119 | Size.PlatformDefault = False 120 | Text = 'SHA512:' 121 | end 122 | object lblHaval: TLabel 123 | Position.X = 5.000000000000000000 124 | Position.Y = 560.000000000000000000 125 | Size.Width = 101.000000000000000000 126 | Size.Height = 17.000000000000000000 127 | Size.PlatformDefault = False 128 | Text = 'Haval:' 129 | end 130 | object edtHavalHash: TEdit 131 | Touch.InteractiveGestures = [LongTap, DoubleTap] 132 | TabOrder = 52 133 | Position.X = 110.000000000000000000 134 | Position.Y = 560.000000000000000000 135 | Size.Width = 700.000000000000000000 136 | Size.Height = 22.000000000000000000 137 | Size.PlatformDefault = False 138 | end 139 | object lblMD4: TLabel 140 | Position.X = 5.000000000000000000 141 | Position.Y = 240.000000000000000000 142 | Size.Width = 101.000000000000000000 143 | Size.Height = 17.000000000000000000 144 | Size.PlatformDefault = False 145 | Text = 'MD4:' 146 | end 147 | object edtMD4Hash: TEdit 148 | Touch.InteractiveGestures = [LongTap, DoubleTap] 149 | TabOrder = 1 150 | Position.X = 110.000000000000000000 151 | Position.Y = 240.000000000000000000 152 | Size.Width = 700.000000000000000000 153 | Size.Height = 22.000000000000000000 154 | Size.PlatformDefault = False 155 | end 156 | object memSHA512Hash: TMemo 157 | Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] 158 | Position.X = 110.000000000000000000 159 | Position.Y = 496.000000000000000000 160 | Size.Width = 700.000000000000000000 161 | Size.Height = 50.000000000000000000 162 | Size.PlatformDefault = False 163 | TabOrder = 50 164 | TextSettings.WordWrap = True 165 | end 166 | object memSHA384Hash: TMemo 167 | Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] 168 | Position.X = 110.000000000000000000 169 | Position.Y = 432.000000000000000000 170 | Size.Width = 700.000000000000000000 171 | Size.Height = 50.000000000000000000 172 | Size.PlatformDefault = False 173 | TabOrder = 36 174 | TextSettings.WordWrap = True 175 | end 176 | object lblRipeMD160: TLabel 177 | Position.X = 5.000000000000000000 178 | Position.Y = 336.000000000000000000 179 | Size.Width = 101.000000000000000000 180 | Size.Height = 17.000000000000000000 181 | Size.PlatformDefault = False 182 | Text = 'RIPEMD-160:' 183 | end 184 | object edtRipeMD160Hash: TEdit 185 | Touch.InteractiveGestures = [LongTap, DoubleTap] 186 | TabOrder = 7 187 | Position.X = 110.000000000000000000 188 | Position.Y = 336.000000000000000000 189 | Size.Width = 700.000000000000000000 190 | Size.Height = 22.000000000000000000 191 | Size.PlatformDefault = False 192 | end 193 | object lblRipeMD128: TLabel 194 | Position.X = 5.000000000000000000 195 | Position.Y = 304.000000000000000000 196 | Size.Width = 101.000000000000000000 197 | Size.Height = 17.000000000000000000 198 | Size.PlatformDefault = False 199 | Text = 'RIPEMD-128:' 200 | end 201 | object edtRipeMD128Hash: TEdit 202 | Touch.InteractiveGestures = [LongTap, DoubleTap] 203 | TabOrder = 3 204 | Position.X = 110.000000000000000000 205 | Position.Y = 304.000000000000000000 206 | Size.Width = 700.000000000000000000 207 | Size.Height = 22.000000000000000000 208 | Size.PlatformDefault = False 209 | end 210 | object lblTiger: TLabel 211 | Position.X = 5.000000000000000000 212 | Position.Y = 592.000000000000000000 213 | Size.Width = 101.000000000000000000 214 | Size.Height = 17.000000000000000000 215 | Size.PlatformDefault = False 216 | Text = 'Tiger:' 217 | end 218 | object edtTigerHash: TEdit 219 | Touch.InteractiveGestures = [LongTap, DoubleTap] 220 | TabOrder = 10 221 | Position.X = 110.000000000000000000 222 | Position.Y = 592.000000000000000000 223 | Size.Width = 700.000000000000000000 224 | Size.Height = 22.000000000000000000 225 | Size.PlatformDefault = False 226 | end 227 | object pgbarFileRead: TProgressBar 228 | Orientation = Horizontal 229 | Position.X = 32.000000000000000000 230 | Position.Y = 152.000000000000000000 231 | Size.Width = 769.000000000000000000 232 | Size.Height = 20.000000000000000000 233 | Size.PlatformDefault = False 234 | end 235 | object cbMD4: TCheckBox 236 | Position.X = 810.000000000000000000 237 | Position.Y = 242.000000000000000000 238 | Size.Width = 20.000000000000000000 239 | Size.Height = 19.000000000000000000 240 | Size.PlatformDefault = False 241 | TabOrder = 11 242 | end 243 | object cbMD5: TCheckBox 244 | IsChecked = True 245 | Position.X = 810.000000000000000000 246 | Position.Y = 274.000000000000000000 247 | Size.Width = 20.000000000000000000 248 | Size.Height = 19.000000000000000000 249 | Size.PlatformDefault = False 250 | TabOrder = 12 251 | end 252 | object cbRipeMD128: TCheckBox 253 | Position.X = 810.000000000000000000 254 | Position.Y = 306.000000000000000000 255 | Size.Width = 20.000000000000000000 256 | Size.Height = 19.000000000000000000 257 | Size.PlatformDefault = False 258 | TabOrder = 13 259 | end 260 | object cbRipeMD160: TCheckBox 261 | Position.X = 810.000000000000000000 262 | Position.Y = 338.000000000000000000 263 | Size.Width = 20.000000000000000000 264 | Size.Height = 19.000000000000000000 265 | Size.PlatformDefault = False 266 | TabOrder = 14 267 | end 268 | object cbSHA1: TCheckBox 269 | IsChecked = True 270 | Position.X = 810.000000000000000000 271 | Position.Y = 370.000000000000000000 272 | Size.Width = 20.000000000000000000 273 | Size.Height = 19.000000000000000000 274 | Size.PlatformDefault = False 275 | TabOrder = 15 276 | end 277 | object cbSHA256: TCheckBox 278 | IsChecked = True 279 | Position.X = 810.000000000000000000 280 | Position.Y = 402.000000000000000000 281 | Size.Width = 20.000000000000000000 282 | Size.Height = 19.000000000000000000 283 | Size.PlatformDefault = False 284 | TabOrder = 16 285 | end 286 | object cbSHA384: TCheckBox 287 | Position.X = 810.000000000000000000 288 | Position.Y = 442.000000000000000000 289 | Size.Width = 20.000000000000000000 290 | Size.Height = 19.000000000000000000 291 | Size.PlatformDefault = False 292 | TabOrder = 17 293 | end 294 | object cbSHA512: TCheckBox 295 | IsChecked = True 296 | Position.X = 810.000000000000000000 297 | Position.Y = 506.000000000000000000 298 | Size.Width = 20.000000000000000000 299 | Size.Height = 19.000000000000000000 300 | Size.PlatformDefault = False 301 | TabOrder = 18 302 | end 303 | object cbHaval: TCheckBox 304 | Position.X = 810.000000000000000000 305 | Position.Y = 562.000000000000000000 306 | Size.Width = 20.000000000000000000 307 | Size.Height = 19.000000000000000000 308 | Size.PlatformDefault = False 309 | TabOrder = 19 310 | end 311 | object cbTiger: TCheckBox 312 | Enabled = False 313 | Position.X = 810.000000000000000000 314 | Position.Y = 594.000000000000000000 315 | Size.Width = 20.000000000000000000 316 | Size.Height = 19.000000000000000000 317 | Size.PlatformDefault = False 318 | TabOrder = 20 319 | end 320 | object cbLowercaseHashes: TCheckBox 321 | IsChecked = True 322 | Position.X = 624.000000000000000000 323 | Position.Y = 622.000000000000000000 324 | Size.Width = 161.000000000000000000 325 | Size.Height = 19.000000000000000000 326 | Size.PlatformDefault = False 327 | TabOrder = 33 328 | Text = 'Lowercase Hashes' 329 | OnChange = cbLowercaseHashesChange 330 | end 331 | object cbCreateHashFiles: TCheckBox 332 | Position.X = 424.000000000000000000 333 | Position.Y = 622.000000000000000000 334 | Size.Width = 137.000000000000000000 335 | Size.Height = 19.000000000000000000 336 | Size.PlatformDefault = False 337 | TabOrder = 35 338 | Text = 'Create Hash Files' 339 | end 340 | object cbCheckAgainstExistingHashFiles: TCheckBox 341 | Position.X = 160.000000000000000000 342 | Position.Y = 622.000000000000000000 343 | Size.Width = 241.000000000000000000 344 | Size.Height = 19.000000000000000000 345 | Size.PlatformDefault = False 346 | TabOrder = 34 347 | Text = 'Check Against Existing Hash Files' 348 | Visible = False 349 | end 350 | end 351 | object TabItem2: TTabItem 352 | CustomIcon = < 353 | item 354 | end> 355 | IsSelected = False 356 | Size.Width = 57.000000000000000000 357 | Size.Height = 24.000000000000000000 358 | Size.PlatformDefault = False 359 | TabOrder = 0 360 | Text = 'Base64' 361 | object memoPlainText: TMemo 362 | Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] 363 | Position.X = 56.000000000000000000 364 | Position.Y = 64.000000000000000000 365 | Size.Width = 737.000000000000000000 366 | Size.Height = 249.000000000000000000 367 | Size.PlatformDefault = False 368 | TabOrder = 10 369 | end 370 | object btnEncode: TButton 371 | Position.X = 16.000000000000000000 372 | Position.Y = 32.000000000000000000 373 | TabOrder = 11 374 | Text = 'Encode' 375 | OnClick = btnEncodeClick 376 | end 377 | object memoBase64Text: TMemo 378 | Touch.InteractiveGestures = [Pan, LongTap, DoubleTap] 379 | Position.X = 48.000000000000000000 380 | Position.Y = 360.000000000000000000 381 | Size.Width = 737.000000000000000000 382 | Size.Height = 249.000000000000000000 383 | Size.PlatformDefault = False 384 | TabOrder = 8 385 | end 386 | object btnDecode: TButton 387 | Position.X = 16.000000000000000000 388 | Position.Y = 328.000000000000000000 389 | TabOrder = 9 390 | Text = 'Decode' 391 | OnClick = btnDecodeClick 392 | end 393 | end 394 | end 395 | end 396 | -------------------------------------------------------------------------------- /frmMain.pas: -------------------------------------------------------------------------------- 1 | unit frmMain; 2 | 3 | interface 4 | 5 | uses 6 | System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, 7 | FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, 8 | FMX.ExtCtrls, IdHashMessageDigest, idHash, FMX.Controls.Presentation, FMX.Edit, 9 | FMX.Layouts, FMX.Memo, FMX.TabControl, DCPtiger, DCPsha512, DCPsha256, 10 | DCPsha1, DCPripemd160, DCPripemd128, DCPmd5, DCPmd4, DCPcrypt2, DCPhaval, 11 | FMX.Menus, System.NetEncoding, System.IOUtils; 12 | 13 | // https://bitbucket.org/wpostma/dcpcrypt2010 14 | 15 | type 16 | TForm1 = class(TForm) 17 | tabBase64: TTabControl; 18 | TabItem1: TTabItem; 19 | TabItem2: TTabItem; 20 | memoPlainText: TMemo; 21 | DropTarget1: TDropTarget; 22 | edtMD5Hash: TEdit; 23 | lblMD5: TLabel; 24 | lblFilename: TLabel; 25 | edtSHA1Hash: TEdit; 26 | lblSHA1: TLabel; 27 | edtSHA256Hash: TEdit; 28 | lblSHA256: TLabel; 29 | lblSHA384: TLabel; 30 | btnEncode: TButton; 31 | memoBase64Text: TMemo; 32 | btnDecode: TButton; 33 | lblSHA512: TLabel; 34 | lblHaval: TLabel; 35 | edtHavalHash: TEdit; 36 | lblMD4: TLabel; 37 | edtMD4Hash: TEdit; 38 | memSHA512Hash: TMemo; 39 | memSHA384Hash: TMemo; 40 | lblRipeMD160: TLabel; 41 | edtRipeMD160Hash: TEdit; 42 | lblRipeMD128: TLabel; 43 | edtRipeMD128Hash: TEdit; 44 | lblTiger: TLabel; 45 | edtTigerHash: TEdit; 46 | pgbarFileRead: TProgressBar; 47 | cbMD4: TCheckBox; 48 | cbMD5: TCheckBox; 49 | cbRipeMD128: TCheckBox; 50 | cbRipeMD160: TCheckBox; 51 | cbSHA1: TCheckBox; 52 | cbSHA256: TCheckBox; 53 | cbSHA384: TCheckBox; 54 | cbSHA512: TCheckBox; 55 | cbHaval: TCheckBox; 56 | cbTiger: TCheckBox; 57 | cbLowercaseHashes: TCheckBox; 58 | cbCreateHashFiles: TCheckBox; 59 | cbCheckAgainstExistingHashFiles: TCheckBox; 60 | procedure DropTarget1Dropped(Sender: TObject; const Data: TDragObject; 61 | const Point: TPointF); 62 | procedure DropTarget1DragOver(Sender: TObject; const Data: TDragObject; 63 | const Point: TPointF; var Operation: TDragOperation); 64 | procedure FormCreate(Sender: TObject); 65 | procedure mnuCopyValueClick(Sender: TObject); 66 | procedure btnEncodeClick(Sender: TObject); 67 | procedure btnDecodeClick(Sender: TObject); 68 | procedure cbLowercaseHashesChange(Sender: TObject); 69 | private 70 | { Private declarations } 71 | dcrypt_haval: TDCP_haval; 72 | dcrypt_md4: TDCP_md4; 73 | dcrypt_md5: TDCP_md5; 74 | dcrypt_ripemd128: TDCP_ripemd128; 75 | dcrypt_ripemd160: TDCP_ripemd160; 76 | dcrypt_sha1: TDCP_sha1; 77 | dcrypt_sha256: TDCP_sha256; 78 | dcrypt_sha384: TDCP_sha384; 79 | dcrypt_sha512: TDCP_sha512; 80 | dcrypt_tiger: TDCP_tiger; 81 | Hashes : array of TDCP_hash; 82 | //HashCheckboxes : array of TCheckbox; 83 | procedure ClearFieldHashValues; 84 | procedure EnableHashCheckboxes; 85 | procedure DisableHashCheckboxes; 86 | procedure CheckHashCase; 87 | procedure CreateHashFiles(strFilename : String); 88 | procedure CalculateFileHash(strFilename : String); 89 | public 90 | { Public declarations } 91 | end; 92 | 93 | var 94 | Form1: TForm1; 95 | 96 | implementation 97 | 98 | {$R *.fmx} 99 | 100 | procedure TForm1.DropTarget1DragOver(Sender: TObject; const Data: TDragObject; 101 | const Point: TPointF; var Operation: TDragOperation); 102 | begin 103 | Operation := TDragOperation.Copy; 104 | end; 105 | 106 | 107 | procedure TForm1.EnableHashCheckboxes; 108 | begin 109 | cbMD4.Enabled := True; 110 | cbMD5.Enabled := True; 111 | cbRipeMD128.Enabled := True; 112 | cbRipeMD160.Enabled := True; 113 | cbSHA1.Enabled := True; 114 | cbSHA256.Enabled := True; 115 | cbSHA384.Enabled := True; 116 | cbSHA512.Enabled := True; 117 | cbHaval.Enabled := True; 118 | cbTiger.Enabled := True; 119 | end; 120 | 121 | 122 | procedure TForm1.DisableHashCheckboxes; 123 | begin 124 | cbMD4.Enabled := False; 125 | cbMD5.Enabled := False; 126 | cbRipeMD128.Enabled := False; 127 | cbRipeMD160.Enabled := False; 128 | cbSHA1.Enabled := False; 129 | cbSHA256.Enabled := False; 130 | cbSHA384.Enabled := False; 131 | cbSHA512.Enabled := False; 132 | cbHaval.Enabled := False; 133 | cbTiger.Enabled := False; 134 | end; 135 | 136 | 137 | procedure TForm1.btnDecodeClick(Sender: TObject); 138 | var 139 | Base64_Decoder : TBase64Encoding; 140 | begin 141 | memoPlainText.Lines.Clear; 142 | Base64_Decoder := TBase64Encoding.Create; 143 | try 144 | memoPlainText.Lines.Add(Base64_Decoder.Decode(memoBase64Text.Text)); 145 | finally 146 | Base64_Decoder.Free; 147 | end; 148 | end; 149 | 150 | 151 | procedure TForm1.btnEncodeClick(Sender: TObject); 152 | var 153 | Base64_Encoder : TBase64Encoding; 154 | begin 155 | memoBase64Text.Lines.Clear; 156 | Base64_Encoder := TBase64Encoding.Create; 157 | try 158 | memoBase64Text.Lines.Add(Base64_Encoder.Encode(memoPlainText.Text)); 159 | finally 160 | Base64_Encoder.Free; 161 | end; 162 | end; 163 | 164 | 165 | procedure TForm1.ClearFieldHashValues; 166 | begin 167 | edtMD4Hash.Text := 'n/a'; 168 | edtMD5Hash.Text := 'n/a'; 169 | edtRipeMD128Hash.Text := 'n/a'; 170 | edtRipeMD160Hash.Text := 'n/a'; 171 | edtSHA1Hash.Text := 'n/a'; 172 | edtSHA256Hash.Text := 'n/a'; 173 | edtHavalHash.Text := 'n/a'; 174 | edtTigerHash.Text := 'n/a'; 175 | memSHA384Hash.Lines.Clear; 176 | memSHA384Hash.Lines.Add('n/a'); 177 | memSHA512Hash.Lines.Clear; 178 | memSHA512Hash.Lines.Add('n/a'); 179 | end; 180 | 181 | 182 | procedure TForm1.CheckHashCase; 183 | var 184 | strTempHash : String; 185 | begin 186 | if cbLowercaseHashes.IsChecked then begin 187 | edtMD4Hash.Text := LowerCase(edtMD4Hash.Text); 188 | edtMD5Hash.Text := LowerCase(edtMD5Hash.Text); 189 | edtRipeMD128Hash.Text := LowerCase(edtRipeMD128Hash.Text); 190 | edtRipeMD160Hash.Text := LowerCase(edtRipeMD160Hash.Text); 191 | edtSHA1Hash.Text := LowerCase(edtSHA1Hash.Text); 192 | edtSHA256Hash.Text := LowerCase(edtSHA256Hash.Text); 193 | edtHavalHash.Text := LowerCase(edtHavalHash.Text); 194 | edtTigerHash.Text := LowerCase(edtTigerHash.Text); 195 | strTempHash := LowerCase(memSHA384Hash.Text); 196 | memSHA384Hash.Lines.Clear; 197 | memSHA384Hash.Lines.Add(strTempHash); 198 | strTempHash := LowerCase(memSHA512Hash.Text); 199 | memSHA512Hash.Lines.Clear; 200 | memSHA512Hash.Lines.Add(strTempHash); 201 | end 202 | else begin 203 | edtMD4Hash.Text := UpperCase(edtMD4Hash.Text); 204 | edtMD5Hash.Text := UpperCase(edtMD5Hash.Text); 205 | edtRipeMD128Hash.Text := UpperCase(edtRipeMD128Hash.Text); 206 | edtRipeMD160Hash.Text := UpperCase(edtRipeMD160Hash.Text); 207 | edtSHA1Hash.Text := UpperCase(edtSHA1Hash.Text); 208 | edtSHA256Hash.Text := UpperCase(edtSHA256Hash.Text); 209 | edtHavalHash.Text := UpperCase(edtHavalHash.Text); 210 | edtTigerHash.Text := UpperCase(edtTigerHash.Text); 211 | strTempHash := UpperCase(memSHA384Hash.Text); 212 | memSHA384Hash.Lines.Clear; 213 | memSHA384Hash.Lines.Add(strTempHash); 214 | strTempHash := UpperCase(memSHA512Hash.Text); 215 | memSHA512Hash.Lines.Clear; 216 | memSHA512Hash.Lines.Add(strTempHash); 217 | end; 218 | end; 219 | 220 | 221 | procedure TForm1.CreateHashFiles(strFilename : String); 222 | 223 | procedure WriteHashFile(HashFilename, TextValue : String); 224 | var 225 | filHashFile : TextFile; 226 | begin 227 | AssignFile(filHashFile, HashFilename); 228 | Rewrite (filHashFile); 229 | Writeln (filHashFile, TextValue); 230 | CloseFile(filHashFile); 231 | end; 232 | 233 | procedure HandleFileExtension(HashCheckbox : TCheckBox; HashEditbox : TEdit; strFileExtension : String); 234 | var 235 | //intLen : Integer; 236 | strCurExt : String; 237 | strHashFilename : String; 238 | begin 239 | //intLen := Length(strFilename); 240 | strCurExt := LowerCase(TPath.GetExtension(strFilename)); 241 | if HashCheckbox.IsChecked and (strCurExt <> strFileExtension) then begin 242 | strHashFilename := strFilename + strFileExtension; 243 | if not FileExists(strHashFilename) then 244 | WriteHashFile(strHashFilename, LowerCase(HashEditbox.Text) + ' ' + TPath.GetFileName(strFilename)); 245 | end; 246 | end; 247 | 248 | begin 249 | HandleFileExtension(cbMD5, edtMD5Hash, '.md5'); 250 | HandleFileExtension(cbSHA1, edtSHA1Hash, '.sha1'); 251 | // HandleFileExtension(cbMD5, edtMD5Hash, '.md5'); 252 | end; 253 | 254 | 255 | procedure TForm1.CalculateFileHash(strFilename : String); 256 | var 257 | HashDigest: array of byte; 258 | i, j, read: integer; 259 | s: string; 260 | buffer: array[0..16383] of byte; 261 | strmInput: TFileStream; 262 | pcount : integer; 263 | 264 | procedure AddHashFunctionToList (hashFunction : TDCP_hash); 265 | begin 266 | SetLength(Hashes, Length(Hashes)+1); 267 | Hashes[Length(Hashes)-1] := hashFunction; 268 | end; 269 | 270 | begin 271 | DisableHashCheckboxes; 272 | ClearFieldHashValues; 273 | lblFilename.Text := strFilename; 274 | 275 | Hashes := nil; 276 | if cbMD4.IsChecked then AddHashFunctionToList(dcrypt_md4); 277 | if cbMD5.IsChecked then AddHashFunctionToList(dcrypt_md5); 278 | if cbRipeMD128.IsChecked then AddHashFunctionToList(dcrypt_ripemd128); 279 | if cbRipeMD160.IsChecked then AddHashFunctionToList(dcrypt_ripemd160); 280 | if cbSHA1.IsChecked then AddHashFunctionToList(dcrypt_sha1); 281 | if cbSHA256.IsChecked then AddHashFunctionToList(dcrypt_sha256); 282 | if cbSHA384.IsChecked then AddHashFunctionToList(dcrypt_sha384); 283 | if cbSHA512.IsChecked then AddHashFunctionToList(dcrypt_sha512); 284 | if cbHaval.IsChecked then AddHashFunctionToList(dcrypt_haval); 285 | if cbTiger.IsChecked then AddHashFunctionToList(dcrypt_tiger); 286 | 287 | pgbarFileRead.Min := 0; 288 | pgbarFileRead.Value := 0; 289 | pgbarFileRead.Visible := True; 290 | 291 | // make a list of all the hash algorithms to use 292 | for i := 0 to Length(Hashes)-1 do 293 | TDCP_hash(Hashes[i]).Init; 294 | strmInput := nil; 295 | try 296 | strmInput := TFileStream.Create(strFilename, fmOpenRead or fmShareDenyWrite); 297 | pgbarFileRead.Max := strmInput.Size; 298 | pcount := 0; 299 | repeat 300 | // read into the buffer 301 | read := strmInput.Read(buffer,Sizeof(buffer)); 302 | pgbarFileRead.Value := pgbarFileRead.Value + Sizeof(buffer); 303 | if pcount mod 40 = 0 then Application.ProcessMessages; 304 | // hash the buffer with each of the selected hashes 305 | for i := 0 to Length(Hashes) - 1 do begin 306 | Hashes[i].Update(buffer,read); 307 | end; 308 | inc(pcount); 309 | until read <> Sizeof(buffer); 310 | strmInput.Free; 311 | // iterate through the selected hashes 312 | memSHA384Hash.Lines.Clear; 313 | memSHA512Hash.Lines.Clear; 314 | for i := 0 to Length(Hashes) - 1 do 315 | begin 316 | SetLength(HashDigest,Hashes[i].HashSize div 8); 317 | Hashes[i].Final(HashDigest[0]); // get the output 318 | s := ''; 319 | for j := 0 to Length(HashDigest) - 1 do // convert it into a hex string 320 | s := s + IntToHex(HashDigest[j],2); 321 | if Hashes[i].Algorithm = 'MD4' then edtMD4Hash.Text := s; 322 | if Hashes[i].Algorithm = 'MD5' then edtMD5Hash.Text := s; 323 | if Hashes[i].Algorithm = 'RipeMD-128' then edtRipeMD128Hash.Text := s; 324 | if Hashes[i].Algorithm = 'RipeMD-160' then edtRipeMD160Hash.Text := s; 325 | if Hashes[i].Algorithm = 'SHA1' then edtSHA1Hash.Text := s; 326 | if Hashes[i].Algorithm = 'SHA256' then edtSHA256Hash.Text := s; 327 | if Hashes[i].Algorithm = 'SHA384' then memSHA384Hash.Lines.Add(s); 328 | if Hashes[i].Algorithm = 'SHA512' then memSHA512Hash.Lines.Add(s); 329 | if Hashes[i].Algorithm = 'Haval (256bit, 5 passes)' then edtHavalHash.Text := s; 330 | if Hashes[i].Algorithm = 'Tiger' then edtTigerHash.Text := s; 331 | //txtOutput.Lines.Add(Hashes[i].Algorithm + ': ' + s); 332 | end; 333 | if cbCreateHashFiles.IsChecked then 334 | CreateHashFiles(strFilename); 335 | except 336 | strmInput.Free; 337 | end; 338 | CheckHashCase; 339 | pgbarFileRead.Visible := False; 340 | EnableHashCheckboxes; 341 | end; 342 | 343 | procedure TForm1.cbLowercaseHashesChange(Sender: TObject); 344 | begin 345 | CheckHashCase; 346 | end; 347 | 348 | procedure TForm1.DropTarget1Dropped(Sender: TObject; const Data: TDragObject; 349 | const Point: TPointF); 350 | begin 351 | CalculateFileHash(Data.Files[0]); 352 | end; 353 | 354 | procedure TForm1.FormCreate(Sender: TObject); 355 | begin 356 | dcrypt_haval:= TDCP_haval.Create(self); 357 | dcrypt_md4:= TDCP_md4.Create(self); 358 | dcrypt_md5:= TDCP_md5.Create(self); 359 | dcrypt_ripemd128:= TDCP_ripemd128.Create(self); 360 | dcrypt_ripemd160:= TDCP_ripemd160.Create(self); 361 | dcrypt_sha1:= TDCP_sha1.Create(self); 362 | dcrypt_sha256:= TDCP_sha256.Create(self); 363 | dcrypt_sha384:= TDCP_sha384.Create(self); 364 | dcrypt_sha512:= TDCP_sha512.Create(self); 365 | dcrypt_tiger:= TDCP_tiger.Create(self); 366 | 367 | lblMD4.TextAlign := TTextAlign.Trailing; 368 | lblMD5.TextAlign := TTextAlign.Trailing; 369 | lblRipeMD128.TextAlign := TTextAlign.Trailing; 370 | lblRipeMD160.TextAlign := TTextAlign.Trailing; 371 | lblSHA1.TextAlign := TTextAlign.Trailing; 372 | lblSHA256.TextAlign := TTextAlign.Trailing; 373 | lblSHA384.TextAlign := TTextAlign.Trailing; 374 | lblSHA512.TextAlign := TTextAlign.Trailing; 375 | lblHaval.TextAlign := TTextAlign.Trailing; 376 | lblTiger.TextAlign := TTextAlign.Trailing; 377 | ClearFieldHashValues; 378 | pgbarFileRead.Visible := False; 379 | 380 | if ParamCount = 1 then begin 381 | if FileExists(ParamStr(1)) then 382 | CalculateFileHash(ParamStr(1)); 383 | end; 384 | end; 385 | 386 | procedure TForm1.mnuCopyValueClick(Sender: TObject); 387 | begin 388 | // 389 | end; 390 | 391 | end. 392 | --------------------------------------------------------------------------------