How Does Navicat Encrypt Password?

This repo will tell you how Navicat encrypts password and offer a tool to reveal passwords encrypted by Navicat.

1. What is Navicat?

Navicat is a series of graphical database management and development software produced by PremiumSoft CyberTech Ltd. for MySQL, MariaDB, Oracle, SQLite, PostgreSQL and Microsoft SQL Server.

It has an Explorer-like graphical user interface and supports multiple database connections for local and remote databases. Its design is made to meet the needs of a variety of audiences, from database administrators and programmers to various businesses/companies that serve clients and share information with partners.

2. What does indicate that Navicat encrypts password?

If you use Navicat to manage one of your databases, the first thing you should do is to create a connection to the database. So that means you should fill textboxes on the window showed below with the database's information like Host nameUser namePassword and so on.

If you check "Save Password", after you click "Ok" button, Navicat will encrypt the password and then save the connection configuration, containing encrypted password, in Windows Registry. The exact path is showed below:

Database Type Path
MySQL HKEY_CURRENT_USER\Software\PremiumSoft\Navicat\Servers\<your connection name>
MariaDB HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMARIADB\Servers\<your connection name>
MongoDB HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMONGODB\Servers\<your connection name>
Microsoft SQL HKEY_CURRENT_USER\Software\PremiumSoft\NavicatMSSQL\Servers\<your connection name>
Oracle HKEY_CURRENT_USER\Software\PremiumSoft\NavicatOra\Servers\<your connection name>
PostgreSQL HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPG\Servers\<your connection name>
SQLite HKEY_CURRENT_USER\Software\PremiumSoft\NavicatSQLite\Servers\<your connection name>

The following is an example:

3. How does Navicat encrypt password?

See here.

4. How to use the sample code in python3 folder?

  • Please make sure that you have Python3.

  • Please make sure that you have pycryptodome module if you want to use NavicatCipher.py and NcxReader.py.

    You can install pycryptodome module by command:

    $ pip install pycryptodome

  • Please make sure that you have pypiwin32 module if you want to use ShowNavicat.py.

    You can install pypiwin32 module by command:

    $ pip install pypiwin32

  1. NavicatCipher.py

    Usage:NavicatCrypto.py <enc|dec> [-ncx] <plaintext|ciphertext><enc|dec>                "enc" for encryption, "dec" for decryption.This parameter must be specified.[-ncx]                   Indicate that plaintext/ciphertext isprepared for/exported from NCX file.This parameter is optional.<plaintext|ciphertext>   Plaintext string or ciphertext string.NOTICE: Ciphertext string must be a hex string.This parameter must be specified.
    

    Example:

    $ ./NavicatCipher.py enc "This is a test"
    0EA71F51DD37BFB60CCBA219BE3A$ ./NavicatCipher.py dec 0EA71F51DD37BFB60CCBA219BE3A This is a test $ ./NavicatCipher.py enc -ncx "This is a test" B75D320B6211468D63EB3B67C9E85933 $ ./NavicatCipher.py dec -ncx B75D320B6211468D63EB3B67C9E85933 This is a test $ python3 Python 3.6.7 (default, Oct 22 2018, 11:32:17) [GCC 8.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from NavicatCipher import * >>> cipher = Navicat12Crypto() >>> cipher.EncryptString('This is a test') '0EA71F51DD37BFB60CCBA219BE3A' >>> cipher.DecryptString('0EA71F51DD37BFB60CCBA219BE3A') 'This is a test' >>> cipher.EncryptStringForNCX('This is a test') 'B75D320B6211468D63EB3B67C9E85933' >>> cipher.DecryptStringForNCX('B75D320B6211468D63EB3B67C9E85933') 'This is a test'

  2. NcxReader.py

    Show database servers' information inside *.ncx file.

    Usage:NcxReader.py <Path to ncx file>
    

    Example:

    $ ./NcxReader ~/connectioms.ncx
    -----------------xxxxxxxxxxxx--------------------
    Connection Type  = MYSQL
    Host             = localhost
    Port = 3306 UserName = root Password = 12345678 ------------------yyyyyyyyyy--------------------- Connection Type = MYSQL Host = example.com Port = 3306 UserName = server Password = 0000000000 ... ... ...

  3. ShowNavicat.py

    Just run it in Windows. It will list all Navicat configurations inside Windows Registry.

    Example:

    >ShowNavicat.py
    +--------------------------------------------------+
    |                   MySQL Server                   |
    +--------------------------------------------------+Host:              example.com
    Port: 3306 Username: server Password: 0000000000 ... ... +--------------------------------------------------+ | MariaDB Server | +--------------------------------------------------+ ... ... +--------------------------------------------------+ | MongoDB Server | +--------------------------------------------------+ ... ... ...
    
    Blowfish.cs
    using System;namespace NavicatCrypto {class Blowfish {public enum Endian { Little, Big };public static readonly int MinUserKeyLength = 1;public static readonly int MaxUserKeyLength = 56;public static readonly int BlockSize = 8;private static readonly UInt32[] OriginPBox = new UInt32[] {0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, 0xA4093822, 0x299F31D0,0x082EFA98, 0xEC4E6C89, 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, 0x9216D5D9, 0x8979FB1B};private static readonly UInt32[,] OriginSBox = new UInt32[4, 256] {{0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A},{0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7},{0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0},{0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6}};private UInt32[] SubKey;private UInt32[,] SBox;private UInt32 _F_Transform(UInt32 x) {byte[] x_bytes = BitConverter.GetBytes(x);if (BitConverter.IsLittleEndian == false)Array.Reverse(x_bytes);return ((SBox[0, x_bytes[3]] + SBox[1, x_bytes[2]]) ^ SBox[2, x_bytes[1]]) +SBox[3, x_bytes[0]];}public void Encrypt(byte[] srcBytes, Endian endian) {byte[] L_bytes = new byte[4];byte[] R_bytes = new byte[4];Array.Copy(srcBytes, 0, L_bytes, 0, 4);Array.Copy(srcBytes, 4, R_bytes, 0, 4);if (BitConverter.IsLittleEndian && endian == Endian.Big || BitConverter.IsLittleEndian == false && endian == Endian.Little) {Array.Reverse(L_bytes);Array.Reverse(R_bytes);}UInt32 L = BitConverter.ToUInt32(L_bytes, 0);UInt32 R = BitConverter.ToUInt32(R_bytes, 0);L ^= SubKey[0];R ^= _F_Transform(L);R ^= SubKey[1];L ^= _F_Transform(R);L ^= SubKey[2];R ^= _F_Transform(L);R ^= SubKey[3];L ^= _F_Transform(R);L ^= SubKey[4];R ^= _F_Transform(L);R ^= SubKey[5];L ^= _F_Transform(R);L ^= SubKey[6];R ^= _F_Transform(L);R ^= SubKey[7];L ^= _F_Transform(R);L ^= SubKey[8];R ^= _F_Transform(L);R ^= SubKey[9];L ^= _F_Transform(R);L ^= SubKey[10];R ^= _F_Transform(L);R ^= SubKey[11];L ^= _F_Transform(R);L ^= SubKey[12];R ^= _F_Transform(L);R ^= SubKey[13];L ^= _F_Transform(R);L ^= SubKey[14];R ^= _F_Transform(L);R ^= SubKey[15];L ^= _F_Transform(R);L ^= SubKey[16];R ^= SubKey[17];L_bytes = BitConverter.GetBytes(R);R_bytes = BitConverter.GetBytes(L);if (BitConverter.IsLittleEndian && endian == Endian.Big || BitConverter.IsLittleEndian == false && endian == Endian.Little) {Array.Reverse(L_bytes);Array.Reverse(R_bytes);}Array.Copy(L_bytes, 0, srcBytes, 0, 4);Array.Copy(R_bytes, 0, srcBytes, 4, 4);}public void Decrypt(byte[] srcBytes, Endian endian) {byte[] L_bytes = new byte[4];byte[] R_bytes = new byte[4];Array.Copy(srcBytes, 0, L_bytes, 0, 4);Array.Copy(srcBytes, 4, R_bytes, 0, 4);if (BitConverter.IsLittleEndian && endian == Endian.Big || BitConverter.IsLittleEndian == false && endian == Endian.Little) {Array.Reverse(L_bytes);Array.Reverse(R_bytes);}UInt32 L = BitConverter.ToUInt32(R_bytes, 0);UInt32 R = BitConverter.ToUInt32(L_bytes, 0);L ^= SubKey[16];R ^= SubKey[17];L ^= _F_Transform(R);R ^= SubKey[15];R ^= _F_Transform(L);L ^= SubKey[14];L ^= _F_Transform(R);R ^= SubKey[13];R ^= _F_Transform(L);L ^= SubKey[12];L ^= _F_Transform(R);R ^= SubKey[11];R ^= _F_Transform(L);L ^= SubKey[10];L ^= _F_Transform(R);R ^= SubKey[9];R ^= _F_Transform(L);L ^= SubKey[8];L ^= _F_Transform(R);R ^= SubKey[7];R ^= _F_Transform(L);L ^= SubKey[6];L ^= _F_Transform(R);R ^= SubKey[5];R ^= _F_Transform(L);L ^= SubKey[4];L ^= _F_Transform(R);R ^= SubKey[3];R ^= _F_Transform(L);L ^= SubKey[2];L ^= _F_Transform(R);R ^= SubKey[1];R ^= _F_Transform(L);L ^= SubKey[0];L_bytes = BitConverter.GetBytes(L);R_bytes = BitConverter.GetBytes(R);if (BitConverter.IsLittleEndian && endian == Endian.Big || BitConverter.IsLittleEndian == false && endian == Endian.Little) {Array.Reverse(L_bytes);Array.Reverse(R_bytes);}Array.Copy(L_bytes, 0, srcBytes, 0, 4);Array.Copy(R_bytes, 0, srcBytes, 4, 4);}public Blowfish(byte[] UserKey) {if (UserKey.Length < MinUserKeyLength)throw new ArgumentException("UserKey is too short.");else if (UserKey.Length > 56)throw new ArgumentException("UserKey is too long.");SubKey = OriginPBox.Clone() as UInt32[];SBox = OriginSBox.Clone() as UInt32[,];for (int i = 0; i < 18; ++i) {UInt32 temp = 0;temp <<= 8;temp |= UserKey[(i * 4) % UserKey.Length];temp <<= 8;temp |= UserKey[(i * 4 + 1) % UserKey.Length];temp <<= 8;temp |= UserKey[(i * 4 + 2) % UserKey.Length];temp <<= 8;temp |= UserKey[(i * 4 + 3) % UserKey.Length];SubKey[i] ^= temp;}byte[] _temp = new byte[8];for (int i = 0; i < 9; ++i) {Encrypt(_temp, Endian.Little);Buffer.BlockCopy(_temp, 0, SubKey, sizeof(UInt32) * 2 * i, 8);}for (int i = 0; i < 4; ++i) {for (int j = 0; j < 128; ++j) {Encrypt(_temp, Endian.Little);Buffer.BlockCopy(_temp, 0, SBox, 256 * sizeof(UInt32) * i + sizeof(UInt64) * j, sizeof(UInt64));}}}}
    }

    NavicatCrypto.cs
    using System;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Security.Cryptography;namespace NavicatCrypto {class Navicat11Cipher {private Blowfish blowfishCipher;protected static byte[] StringToByteArray(string hex) {return Enumerable.Range(0, hex.Length).Where(x => x % 2 == 0).Select(x => Convert.ToByte(hex.Substring(x, 2), 16)).ToArray();}protected static string ByteArrayToString(byte[] bytes) {return BitConverter.ToString(bytes).Replace("-", string.Empty);}protected static void XorBytes(byte[] a, byte[] b, int len) {for (int i = 0; i < len; ++i)a[i] ^= b[i];}public Navicat11Cipher() {byte[] UserKey = Encoding.UTF8.GetBytes("3DC5CA39");var sha1 = new SHA1CryptoServiceProvider();sha1.TransformFinalBlock(UserKey, 0, UserKey.Length);blowfishCipher = new Blowfish(sha1.Hash);}public Navicat11Cipher(string CustomUserKey) {byte[] UserKey = Encoding.UTF8.GetBytes(CustomUserKey);var sha1 = new SHA1CryptoServiceProvider();byte[] UserKeyHash = sha1.TransformFinalBlock(UserKey, 0, 8);blowfishCipher = new Blowfish(UserKeyHash);}public string EncryptString(string plaintext) {byte[] plaintext_bytes = Encoding.UTF8.GetBytes(plaintext);byte[] CV = Enumerable.Repeat<byte>(0xFF, Blowfish.BlockSize).ToArray();blowfishCipher.Encrypt(CV, Blowfish.Endian.Big);string ret = "";int blocks_len = plaintext_bytes.Length / Blowfish.BlockSize;int left_len = plaintext_bytes.Length % Blowfish.BlockSize;byte[] temp = new byte[Blowfish.BlockSize];for (int i = 0; i < blocks_len; ++i) {Array.Copy(plaintext_bytes, Blowfish.BlockSize * i, temp, 0, Blowfish.BlockSize);XorBytes(temp, CV, Blowfish.BlockSize);blowfishCipher.Encrypt(temp, Blowfish.Endian.Big);XorBytes(CV, temp, Blowfish.BlockSize);ret += ByteArrayToString(temp);}if (left_len != 0) {blowfishCipher.Encrypt(CV, Blowfish.Endian.Big);XorBytes(CV,plaintext_bytes.Skip(blocks_len * Blowfish.BlockSize).Take(left_len).ToArray(),left_len);ret += ByteArrayToString(CV.Take(left_len).ToArray());}return ret;}public string DecryptString(string ciphertext) {byte[] ciphertext_bytes = StringToByteArray(ciphertext);byte[] CV = Enumerable.Repeat<byte>(0xFF, Blowfish.BlockSize).ToArray();blowfishCipher.Encrypt(CV, Blowfish.Endian.Big);byte[] ret = new byte[0];int blocks_len = ciphertext_bytes.Length / Blowfish.BlockSize;int left_len = ciphertext_bytes.Length % Blowfish.BlockSize;byte[] temp = new byte[Blowfish.BlockSize];byte[] temp2 = new byte[Blowfish.BlockSize];for (int i = 0; i < blocks_len; ++i) {Array.Copy(ciphertext_bytes, Blowfish.BlockSize * i, temp, 0, Blowfish.BlockSize);Array.Copy(temp, temp2, Blowfish.BlockSize);blowfishCipher.Decrypt(temp, Blowfish.Endian.Big);XorBytes(temp, CV, Blowfish.BlockSize);ret = ret.Concat(temp).ToArray();XorBytes(CV, temp2, Blowfish.BlockSize);}if (left_len != 0) {Array.Clear(temp, 0, temp.Length);Array.Copy(ciphertext_bytes, Blowfish.BlockSize * blocks_len, temp, 0, left_len);blowfishCipher.Encrypt(CV, Blowfish.Endian.Big);XorBytes(temp, CV, Blowfish.BlockSize);ret = ret.Concat(temp.Take(left_len).ToArray()).ToArray();}return Encoding.UTF8.GetString(ret);}}class Navicat12Cipher : Navicat11Cipher {private AesCryptoServiceProvider AesServiceProvider;public Navicat12Cipher() : base() {AesServiceProvider = new AesCryptoServiceProvider();AesServiceProvider.KeySize = 128;AesServiceProvider.Mode = CipherMode.CBC;AesServiceProvider.Padding = PaddingMode.PKCS7;AesServiceProvider.Key = Encoding.UTF8.GetBytes("libcckeylibcckey");AesServiceProvider.IV = Encoding.UTF8.GetBytes("libcciv libcciv ");}public string EncryptStringForNCX(string plaintext) {ICryptoTransform AesEncryptor = AesServiceProvider.CreateEncryptor();MemoryStream ms = new MemoryStream();CryptoStream cs = new CryptoStream(ms, AesEncryptor, CryptoStreamMode.Write);byte[] plaintext_bytes = Encoding.UTF8.GetBytes(plaintext);cs.Write(plaintext_bytes, 0, plaintext_bytes.Length);cs.FlushFinalBlock();return ByteArrayToString(ms.ToArray());}public string DecryptStringForNCX(string ciphertext) {ICryptoTransform AesDecryptor = AesServiceProvider.CreateDecryptor();MemoryStream ms = new MemoryStream();CryptoStream cs = new CryptoStream(ms, AesDecryptor, CryptoStreamMode.Write);byte[] ciphertext_bytes = StringToByteArray(ciphertext);cs.Write(ciphertext_bytes, 0, ciphertext_bytes.Length);cs.FlushFinalBlock();return Encoding.UTF8.GetString(ms.ToArray());}}
    }

    原文链接:https://github.com/HyperSine/how-does-navicat-encrypt-password

     

Navicat 密码加密算法相关推荐

  1. 凯撒密码加密算法 (8 分)

    凯撒密码加密算法 (8 分) 编写一个凯撒密码加密程序,接收用户输入的文本和密钥k,对明文中的字母a-z和字母A-Z替换为其后第k个字母. 输入格式: 接收两行输入,第一行为待加密的明文,第二行为密钥 ...

  2. 很方便的密码加密算法BCrypt

    摘要:用户表的密码一般都不是使用明文,使用明文坏处可以参考之前CSDN数据库被黑导致用户密码泄露造成的影响.虽然使用明文也有一定的方便之处(毕竟现在的加密都是单向的,比如客户打电话问密码.老大或者上级 ...

  3. 腾讯物联网云平台 密钥 MQTT参数生成及密码加密算法实现

    腾讯物联网云平台 密钥 MQTT参数生成及密码加密算法实现 腾讯云三元组 腾讯云三元组 首先在腾讯物联网云平台创建好项目.产品.设备,然后获取该设备的三元组.下面通过我的创建的产品作为示例: Prod ...

  4. 维吉尼亚密码加密算法

    维吉尼亚加密算法是由凯撒密码拓展而来的,在凯撒密码的基础上加上了密钥这一概念. 先说说凯撒密码的加密方式: 对于明文中的所有字母都在字母表上向前或者向后按照一定数目进行偏移替换成为密文.例如对于:明文 ...

  5. playfair密码和凯撒密码加密算法的Java实现

    文章目录 一.实现广义的凯撒密码加密算法 二.实现广义的playfair密码的加密算法 总结 加密原理: 一.实现广义的凯撒密码加密算法 //实现广义的凯撒密码//凯撒密码的加密String plai ...

  6. Python 之恺撒密码加密算法

            恺撒密码(Caesar cipher),又称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个 ...

  7. C#.net实现密码加密算法的语句

    代码 //SHA-1算法 string password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfi ...

  8. 凯撒密码加密算法python_Python最新暴力破解WiFi,攻破所有密码限制,最强破解!...

    生成密码本 对于这个密码本就是我们常用的密码,一般是有数字.字母和符号组成.而现在呢?我们就用Python生成一个简单的密码本,这里用到的思路主要是穷举法.这里用到的库是itertools,没有的可以 ...

  9. 用c语言elgamal共密钥密码加密算法,非对称密钥体制RSA加密原理

    一.非对称密钥加密概述 前面讲述了对称密钥加密体制.使用对称密钥加密体制进行保密通信时,任意不同的两个用户之间都应该使用互不相同的密钥.这样,如果一个网络中有n个用户,他们之间彼此都可能进行秘密通信, ...

最新文章

  1. CUDA 7 流并发性优化
  2. Ubuntu解决gedit warning问题的方法
  3. 轻松精通数据库管理之道——运维巡检之四(数据库备份)
  4. 结构化日志:出错时你最想要的好朋友
  5. CS144 lab0 笔记
  6. 服务器云平台 系统,服务器云平台 系统
  7. vue element container 子路由
  8. 中国数控攻牙机市场趋势报告、技术动态创新及市场预测
  9. 2.4 sklearn中的metrics.roc_auc_score评价指标
  10. 思维导图设计测试用例
  11. python批量保存网页为pdf_在chrome中自动打印/保存网页为pdf - python 3.6
  12. 64位驱动 hp630打印机_HP LaserJet1010 打印机驱动win7 64位
  13. 工作找了很多,兜兜转转,就是没遇到合适的,怎么办
  14. 百度电子商务平台“有啊”正式上线,中国的电子商务平台或将重新洗牌?
  15. nginx: [emerg] could not build server_names_hash
  16. Win10搭建(FTP、LLS)
  17. 计算机中桌面中不显示U盘图标,电脑不显示u盘怎么回事 电脑不显示u盘的解决办法...
  18. 《当程序员的那些狗日日子》(八)床上等你
  19. oracle10g lsnrctl,linux下oracle10g lsnrctl没反应 sqlplus正常 bug4518443
  20. 拔毒化腐生肌药题库【1】

热门文章

  1. C51单片机T0/T1计数器举例
  2. 数据仓库中的 ods ,dw,dm分别表示什么?
  3. 某985大学 软件工程专硕,复试线暴涨60分!
  4. 开放式激光振镜+运动控制器(五):ZMC408SCAN控制器硬件介绍
  5. [radius] Acct-Terminate-Cause
  6. sqlite:微信数据库
  7. P3041 [USACO12JAN]Video Game Combos【AC自动机+DP】
  8. 【算法设计与分析】-- 贪心法
  9. 磁力BT等下载工具记录
  10. 西门子伺服简单计算及长度单位LU