├── .gitignore ├── DelayedEventHandler.cs ├── KeePassHIBP.csproj ├── KeePassHIBP.sln ├── KeePassHIBPExt.cs ├── LICENSE ├── Properties ├── AssemblyInfo.cs ├── Resources.Designer.cs └── Resources.resx ├── README.md ├── Resources └── B16x16_Icon.png └── keepass.version /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | x64/ 19 | x86/ 20 | bld/ 21 | [Bb]in/ 22 | [Oo]bj/ 23 | [Ll]og/ 24 | 25 | # Visual Studio 2015 cache/options directory 26 | .vs/ 27 | # Uncomment if you have tasks that create the project's static files in wwwroot 28 | #wwwroot/ 29 | 30 | # MSTest test Results 31 | [Tt]est[Rr]esult*/ 32 | [Bb]uild[Ll]og.* 33 | 34 | # NUNIT 35 | *.VisualState.xml 36 | TestResult.xml 37 | 38 | # Build Results of an ATL Project 39 | [Dd]ebugPS/ 40 | [Rr]eleasePS/ 41 | dlldata.c 42 | 43 | # DNX 44 | project.lock.json 45 | artifacts/ 46 | 47 | *_i.c 48 | *_p.c 49 | *_i.h 50 | *.ilk 51 | *.meta 52 | *.obj 53 | *.pch 54 | *.pdb 55 | *.pgc 56 | *.pgd 57 | *.rsp 58 | *.sbr 59 | *.tlb 60 | *.tli 61 | *.tlh 62 | *.tmp 63 | *.tmp_proj 64 | *.log 65 | *.vspscc 66 | *.vssscc 67 | .builds 68 | *.pidb 69 | *.svclog 70 | *.scc 71 | 72 | # Chutzpah Test files 73 | _Chutzpah* 74 | 75 | # Visual C++ cache files 76 | ipch/ 77 | *.aps 78 | *.ncb 79 | *.opendb 80 | *.opensdf 81 | *.sdf 82 | *.cachefile 83 | *.VC.db 84 | *.VC.VC.opendb 85 | 86 | # Visual Studio profiler 87 | *.psess 88 | *.vsp 89 | *.vspx 90 | *.sap 91 | 92 | # TFS 2012 Local Workspace 93 | $tf/ 94 | 95 | # Guidance Automation Toolkit 96 | *.gpState 97 | 98 | # ReSharper is a .NET coding add-in 99 | _ReSharper*/ 100 | *.[Rr]e[Ss]harper 101 | *.DotSettings.user 102 | 103 | # JustCode is a .NET coding add-in 104 | .JustCode 105 | 106 | # TeamCity is a build add-in 107 | _TeamCity* 108 | 109 | # DotCover is a Code Coverage Tool 110 | *.dotCover 111 | 112 | # NCrunch 113 | _NCrunch_* 114 | .*crunch*.local.xml 115 | nCrunchTemp_* 116 | 117 | # MightyMoose 118 | *.mm.* 119 | AutoTest.Net/ 120 | 121 | # Web workbench (sass) 122 | .sass-cache/ 123 | 124 | # Installshield output folder 125 | [Ee]xpress/ 126 | 127 | # DocProject is a documentation generator add-in 128 | DocProject/buildhelp/ 129 | DocProject/Help/*.HxT 130 | DocProject/Help/*.HxC 131 | DocProject/Help/*.hhc 132 | DocProject/Help/*.hhk 133 | DocProject/Help/*.hhp 134 | DocProject/Help/Html2 135 | DocProject/Help/html 136 | 137 | # Click-Once directory 138 | publish/ 139 | 140 | # Publish Web Output 141 | *.[Pp]ublish.xml 142 | *.azurePubxml 143 | # TODO: Comment the next line if you want to checkin your web deploy settings 144 | # but database connection strings (with potential passwords) will be unencrypted 145 | *.pubxml 146 | *.publishproj 147 | 148 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 149 | # checkin your Azure Web App publish settings, but sensitive information contained 150 | # in these scripts will be unencrypted 151 | PublishScripts/ 152 | 153 | # NuGet Packages 154 | *.nupkg 155 | # The packages folder can be ignored because of Package Restore 156 | **/packages/* 157 | # except build/, which is used as an MSBuild target. 158 | !**/packages/build/ 159 | # Uncomment if necessary however generally it will be regenerated when needed 160 | #!**/packages/repositories.config 161 | # NuGet v3's project.json files produces more ignoreable files 162 | *.nuget.props 163 | *.nuget.targets 164 | 165 | # Microsoft Azure Build Output 166 | csx/ 167 | *.build.csdef 168 | 169 | # Microsoft Azure Emulator 170 | ecf/ 171 | rcf/ 172 | 173 | # Windows Store app package directories and files 174 | AppPackages/ 175 | BundleArtifacts/ 176 | Package.StoreAssociation.xml 177 | _pkginfo.txt 178 | 179 | # Visual Studio cache files 180 | # files ending in .cache can be ignored 181 | *.[Cc]ache 182 | # but keep track of directories ending in .cache 183 | !*.[Cc]ache/ 184 | 185 | # Others 186 | ClientBin/ 187 | ~$* 188 | *~ 189 | *.dbmdl 190 | *.dbproj.schemaview 191 | *.pfx 192 | *.publishsettings 193 | node_modules/ 194 | orleans.codegen.cs 195 | 196 | # Since there are multiple workflows, uncomment next line to ignore bower_components 197 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 198 | #bower_components/ 199 | 200 | # RIA/Silverlight projects 201 | Generated_Code/ 202 | 203 | # Backup & report files from converting an old project file 204 | # to a newer Visual Studio version. Backup files are not needed, 205 | # because we have git ;-) 206 | _UpgradeReport_Files/ 207 | Backup*/ 208 | UpgradeLog*.XML 209 | UpgradeLog*.htm 210 | 211 | # SQL Server files 212 | *.mdf 213 | *.ldf 214 | 215 | # Business Intelligence projects 216 | *.rdl.data 217 | *.bim.layout 218 | *.bim_*.settings 219 | 220 | # Microsoft Fakes 221 | FakesAssemblies/ 222 | 223 | # GhostDoc plugin setting file 224 | *.GhostDoc.xml 225 | 226 | # Node.js Tools for Visual Studio 227 | .ntvs_analysis.dat 228 | 229 | # Visual Studio 6 build log 230 | *.plg 231 | 232 | # Visual Studio 6 workspace options file 233 | *.opt 234 | 235 | # Visual Studio LightSwitch build output 236 | **/*.HTMLClient/GeneratedArtifacts 237 | **/*.DesktopClient/GeneratedArtifacts 238 | **/*.DesktopClient/ModelManifest.xml 239 | **/*.Server/GeneratedArtifacts 240 | **/*.Server/ModelManifest.xml 241 | _Pvt_Extensions 242 | 243 | # Paket dependency manager 244 | .paket/paket.exe 245 | paket-files/ 246 | 247 | # FAKE - F# Make 248 | .fake/ 249 | 250 | # JetBrains Rider 251 | .idea/ 252 | *.sln.iml 253 | -------------------------------------------------------------------------------- /DelayedEventHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace KeePassHIBP 5 | { 6 | public class DelayedEventHandler 7 | { 8 | private readonly Timer delayTimer = new Timer(); 9 | 10 | private object delegatedSender; 11 | private EventArgs delegatedEventArgs; 12 | 13 | public EventHandler OnDelay; 14 | 15 | public DelayedEventHandler(TimeSpan delay, EventHandler eventDelegate) 16 | { 17 | delayTimer.Interval = (int)delay.TotalMilliseconds; 18 | delayTimer.Tick += delegate 19 | { 20 | delayTimer.Stop(); 21 | 22 | if (eventDelegate != null) 23 | { 24 | eventDelegate.Invoke(delegatedSender, delegatedEventArgs); 25 | } 26 | }; 27 | 28 | OnDelay = delegate (object sender, EventArgs e) 29 | { 30 | delegatedSender = sender; 31 | delegatedEventArgs = e; 32 | 33 | delayTimer.Stop(); 34 | 35 | delayTimer.Start(); 36 | }; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /KeePassHIBP.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {6A249FA1-3F87-4C81-8D31-6BDF62308F48} 8 | Library 9 | Properties 10 | KeePassHIBP 11 | KeePassHIBP 12 | v4.0 13 | 512 14 | 15 | 16 | 17 | true 18 | full 19 | false 20 | bin\Debug\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | false 25 | x86 26 | 27 | 28 | pdbonly 29 | true 30 | bin\Release\ 31 | TRACE 32 | prompt 33 | 4 34 | false 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | True 49 | True 50 | Resources.resx 51 | 52 | 53 | 54 | 55 | ResXFileCodeGenerator 56 | Resources.Designer.cs 57 | 58 | 59 | 60 | 61 | {10938016-dee2-4a25-9a5a-8fd3444379ca} 62 | KeePass 63 | 64 | 65 | 66 | 67 | 68 | 69 | 76 | -------------------------------------------------------------------------------- /KeePassHIBP.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.27130.2027 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeePassHIBP", "KeePassHIBP.csproj", "{6A249FA1-3F87-4C81-8D31-6BDF62308F48}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeePass", "..\KeePass\KeePass\KeePass.csproj", "{10938016-DEE2-4A25-9A5A-8FD3444379CA}" 9 | EndProject 10 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B6024896-002F-4562-91BA-DCF0E56EF345}" 11 | ProjectSection(SolutionItems) = preProject 12 | keepass.version = keepass.version 13 | README.md = README.md 14 | EndProjectSection 15 | EndProject 16 | Global 17 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 18 | Debug|Any CPU = Debug|Any CPU 19 | Release|Any CPU = Release|Any CPU 20 | EndGlobalSection 21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 22 | {6A249FA1-3F87-4C81-8D31-6BDF62308F48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 23 | {6A249FA1-3F87-4C81-8D31-6BDF62308F48}.Debug|Any CPU.Build.0 = Debug|Any CPU 24 | {6A249FA1-3F87-4C81-8D31-6BDF62308F48}.Release|Any CPU.ActiveCfg = Release|Any CPU 25 | {6A249FA1-3F87-4C81-8D31-6BDF62308F48}.Release|Any CPU.Build.0 = Release|Any CPU 26 | {10938016-DEE2-4A25-9A5A-8FD3444379CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 27 | {10938016-DEE2-4A25-9A5A-8FD3444379CA}.Debug|Any CPU.Build.0 = Debug|Any CPU 28 | {10938016-DEE2-4A25-9A5A-8FD3444379CA}.Release|Any CPU.ActiveCfg = Release|Any CPU 29 | {10938016-DEE2-4A25-9A5A-8FD3444379CA}.Release|Any CPU.Build.0 = Release|Any CPU 30 | EndGlobalSection 31 | GlobalSection(SolutionProperties) = preSolution 32 | HideSolutionNode = FALSE 33 | EndGlobalSection 34 | GlobalSection(ExtensibilityGlobals) = postSolution 35 | SolutionGuid = {E1AD4ACB-ACCA-40ED-AF9B-4443BF8D623C} 36 | EndGlobalSection 37 | EndGlobal 38 | -------------------------------------------------------------------------------- /KeePassHIBPExt.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Drawing; 5 | using System.IO; 6 | using System.Linq; 7 | using System.Net; 8 | using System.Reflection; 9 | using System.Security.Cryptography; 10 | using System.Threading; 11 | using System.Windows.Forms; 12 | using KeePass.Forms; 13 | using KeePass.Plugins; 14 | using KeePass.UI; 15 | using KeePassLib.Serialization; 16 | using KeePassLib.Utility; 17 | 18 | namespace KeePassHIBP 19 | { 20 | public class KeePassHIBPExt : Plugin 21 | { 22 | public override Image SmallIcon 23 | { 24 | get { return Properties.Resources.B16x16_Icon; } 25 | } 26 | 27 | public override string UpdateUrl 28 | { 29 | get { return "https://github.com/JanisEst/KeePassHIBP/raw/master/keepass.version"; } 30 | } 31 | 32 | public override bool Initialize(IPluginHost host) 33 | { 34 | //Debugger.Launch(); 35 | 36 | // Workaround to support Tsl1.2 on .NET 4.0 37 | ServicePointManager.Expect100Continue = true; 38 | ServicePointManager.SecurityProtocol |= (SecurityProtocolType)768 | (SecurityProtocolType)3072; 39 | 40 | GlobalWindowManager.WindowAdded += WindowAddedHandler; 41 | 42 | return true; 43 | } 44 | 45 | public override void Terminate() 46 | { 47 | GlobalWindowManager.WindowAdded -= WindowAddedHandler; 48 | } 49 | 50 | /// 51 | /// Used to modify other form when they load. 52 | /// 53 | /// 54 | /// 55 | private void WindowAddedHandler(object sender, GwmWindowEventArgs e) 56 | { 57 | if (e.Form is PwEntryForm || e.Form is KeyCreationForm) 58 | { 59 | e.Form.Shown += delegate 60 | { 61 | var fieldInfo = e.Form.GetType().GetField("m_icgPassword", BindingFlags.Instance | BindingFlags.NonPublic); 62 | if (fieldInfo != null) 63 | { 64 | var icg = fieldInfo.GetValue(e.Form) as PwInputControlGroup; 65 | if (icg != null) 66 | { 67 | var m_tbPassword = e.Form.Controls.Find("m_tbPassword", true).FirstOrDefault() as TextBox; 68 | if (m_tbPassword != null) 69 | { 70 | m_tbPassword.TextChanged += new DelayedEventHandler(TimeSpan.FromMilliseconds(500), delegate 71 | { 72 | var pwBytes = icg.GetPasswordUtf8(); 73 | var hash = CreateSha1Hash(pwBytes); 74 | MemUtil.ZeroByteArray(pwBytes); 75 | 76 | ThreadPool.QueueUserWorkItem(delegate(object oHash) 77 | { 78 | var strHash = (string)oHash; 79 | try 80 | { 81 | var knownHashes = RequestPwnedHashes(strHash); 82 | 83 | if (knownHashes.Contains(hash)) 84 | { 85 | m_tbPassword.Invoke((MethodInvoker)delegate 86 | { 87 | var toolTip = new ToolTip(); 88 | var pt = new Point(0, 0); 89 | pt.Offset(0, m_tbPassword.Height + 1); 90 | toolTip.Show("Warning: This password has previously appeared in a data breach.", m_tbPassword, pt, 2500); 91 | }); 92 | } 93 | } 94 | catch 95 | { 96 | // Service may not be available. 97 | } 98 | }, hash); 99 | 100 | MemUtil.ZeroByteArray(pwBytes); 101 | }).OnDelay; 102 | } 103 | } 104 | } 105 | }; 106 | } 107 | } 108 | 109 | private static List RequestPwnedHashes(string hash) 110 | { 111 | const string ApiUrl = "https://api.pwnedpasswords.com/range/"; 112 | 113 | var first5Chars = hash.Substring(0, 5); 114 | 115 | var result = DownloadString(ApiUrl + first5Chars); 116 | 117 | result = StrUtil.NormalizeNewLines(result, false); 118 | 119 | const int Sha1SuffixLength = 35; 120 | 121 | return result 122 | .Split('\n') 123 | .Where(l => l.Length >= Sha1SuffixLength) 124 | .Select(l => first5Chars + l.Substring(0, Sha1SuffixLength)) 125 | .ToList(); 126 | } 127 | 128 | private static string DownloadString(string url) 129 | { 130 | var ioc = IOConnectionInfo.FromPath(url); 131 | 132 | using (var s = IOConnection.OpenRead(ioc)) 133 | { 134 | if (s == null) 135 | { 136 | throw new InvalidOperationException(); 137 | } 138 | 139 | using (var ms = new MemoryStream()) 140 | { 141 | MemUtil.CopyStream(s, ms); 142 | 143 | return StrUtil.Utf8.GetString(ms.ToArray()); 144 | } 145 | } 146 | } 147 | 148 | private static string CreateSha1Hash(byte[] data) 149 | { 150 | using (var sha1 = new SHA1Managed()) 151 | { 152 | var hash = sha1.ComputeHash(data); 153 | 154 | return MemUtil.ByteArrayToHexString(hash); 155 | } 156 | } 157 | } 158 | } 159 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Janis Estelmann 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Allgemeine Informationen über eine Assembly werden über die folgenden 6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, 7 | // die einer Assembly zugeordnet sind. 8 | [assembly: AssemblyTitle("KeePassHIBP")] 9 | [assembly: AssemblyDescription("KeePass 2.x plugin which checks passwords on https://haveibeenpwned.com/")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Janis Estelmann")] 12 | [assembly: AssemblyProduct("KeePass Plugin")] 13 | [assembly: AssemblyCopyright("")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar 18 | // für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von 19 | // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. 20 | [assembly: ComVisible(false)] 21 | 22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird 23 | [assembly: Guid("6a249fa1-3f87-4c81-8d31-6bee62308f39")] 24 | 25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: 26 | // 27 | // Hauptversion 28 | // Nebenversion 29 | // Buildnummer 30 | // Revision 31 | // 32 | // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern 33 | // übernehmen, indem Sie "*" eingeben: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // Dieser Code wurde von einem Tool generiert. 4 | // Laufzeitversion:4.0.30319.42000 5 | // 6 | // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn 7 | // der Code erneut generiert wird. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace KeePassHIBP.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. 17 | /// 18 | // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert 19 | // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. 20 | // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen 21 | // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("KeePassHIBP.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle 51 | /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. 65 | /// 66 | internal static System.Drawing.Bitmap B16x16_Icon { 67 | get { 68 | object obj = ResourceManager.GetObject("B16x16_Icon", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\B16x16_Icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | KeePassHIBP 2 | ================================= 3 | 4 | OVERVIEW 5 | ----- 6 | KeePassHIBP (Have I Been Pwned) is a plug-in for KeePass 2.x which tests your passwords against the [Have I Been Pwned](https://haveibeenpwned.com/) database. 7 | 8 | The plugin hooks into two windows in KeePass (the 'Create Composite Master Key' form and the 'Edit Entry' form). When you type in the password field your input gets checked if it has previously appeared in a data breach. You can get [here](https://www.troyhunt.com/ive-just-launched-pwned-passwords-version-2/) more informations about how the API of HIBP works. 9 | 10 | INSTALLATION 11 | ----- 12 | - Download from https://github.com/JanisEst/KeePassHIBP/releases 13 | - Copy the plug-in (KeePassHIBP.plgx) into the KeePass plugin directory 14 | - Start KeePass 15 | 16 | HOW TO USE 17 | ----- 18 | Type into the password field in one of the mentioned forms. If the password is weak you will see a little tooltip: 19 | 20 | ![alt tag](https://abload.de/img/hibpksq5z.jpg) 21 | -------------------------------------------------------------------------------- /Resources/B16x16_Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JanisEst/KeePassHIBP/2790711a8c0e1f0d64e761a4acab56f661f22c37/Resources/B16x16_Icon.png -------------------------------------------------------------------------------- /keepass.version: -------------------------------------------------------------------------------- 1 | : 2 | KeePassHIBP:1.0.0 3 | : 4 | --------------------------------------------------------------------------------