mysql資料庫資料加密,mysql資料庫用戶密碼加密

本文目錄一覽:

怎麼把mysql資料庫中現有的數據進行des加密,加密後的結果和java中des加密的結果一樣。

最近需要對數據進行加密/解密, 因此選用了CryptoJS庫, 對數據做DES演算法的加密/解密

首選查看官方示例, 將密文進行Base64編碼, 掉進一個大坑

script src=”htt p:/ /crypto-js.googlecod e.c om/svn/tags/3.1.2/build/rollups/tripledes.js”/script

script

var encrypted = CryptoJS.DES.encrypt(“Message”, “Secret Passphrase”);

// ciphertext changed every time you run it

// 加密的結果不應該每次都是一樣的嗎?

console.log(encrypted.toString(), encrypted.ciphertext.toString(CryptoJS.enc.Base64));

var decrypted = CryptoJS.DES.decrypt(encrypted, “Secret Passphrase”);

console.log(decrypted.toString(CryptoJS.enc.Utf8));

/script

對這些加密演算法不了解, 只能求助Google

des encrypion: js encrypted value does not match the java encrypted value

In cryptoJS you have to convert the key to hex and useit as word just like above (otherwise it will be considered as passphrase)

For the key, when you pass a string, it’s treated as a passphrase and used to derive an actual key and IV. Or you can pass a WordArray that represents the actual key.

原來是我指定key的方式不對, 直接將字元串做為參數, 想當然的以為這就是key, 其實不然, CryptoJS會根據這個字元串算出真正的key和IV(各種新鮮名詞不解釋, 問我也沒用, 我也不懂 -_-“)

那麼我們只需要將key和iv對應的字元串轉成CryptoJS的WordArray類型, 在DES加密時做為參數傳入即可, 這樣對Message這個字元串加密, 每次得到的密文都是YOa3le0I+dI=

var keyHex = CryptoJS.enc.Utf8.parse(‘abcd1234’);

var ivHex = CryptoJS.enc.Utf8.parse(‘inputvec’);

var encrypted = CryptoJS.DES.encrypt(‘Message’, keyHex, { iv: ivHex });

這樣是不是就萬事OK了? 哪有, 誰知道這坑是一個接一個啊.

我們再試試Java這邊的DES加密是不是和這個結果一樣, 具體實現請參考Simple Java Class to DES Encrypt Strings

果真掉坑裡了, Java通過DES加密Message這個字元串得到的結果是8dKft9vkZ4I=和CryptoJS算出來的不一樣啊…親

繼續求助Google

C# and Java DES Encryption value are not identical

SunJCE provider uses ECB as the default mode, and PKCS5Padding as the default padding scheme for DES.(JCA Doc)

This means that in the case of the SunJCE provider,

Cipher c1 = Cipher.getInstance(“DES/ECB/PKCS5Padding”);

and

Cipher c1 = Cipher.getInstance(“DES”);

are equivalent statements.

原來是CryptoJS進行DES加密時, 默認的模式和padding方式和Java默認的不一樣造成的, 必須使用ECB mode和PKCS5Padding, 但是CryptoJS中只有Pkcs7, 不管了, 試試看…

script src=”htt p:/ /crypto-js.googleco de.c om/svn/tags/3.1.2/build/rollups/tripledes.js”/script

script src=”ht tp:/ /crypto-js.googleco de.c om/svn/tags/3.1.2/build/components/mode-ecb.js”/script

script

var keyHex = CryptoJS.enc.Utf8.parse(‘abcd1234’);

var encrypted = CryptoJS.DES.encrypt(‘Message’, keyHex, {

mode: CryptoJS.mode.ECB,

padding: CryptoJS.pad.Pkcs7

});

console.log(encrypted.toString(), encrypted.ciphertext.toString(CryptoJS.enc.Base64));

/script

咦…使用Pkcs7能得到和Java DES一樣的結果了, 哇塞…好神奇

那我們試試統一Java也改成Cipher.getInstance(“DES/ECB/PKCS7Padding”)試試, 結果得到一個大大的錯誤

Error:java.security.NoSuchAlgorithmException: Cannot find any provider supporting DES/ECB/PKCS7Padding

沒辦法, 繼續Google

java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/ECB/PKCS7PADDING

I will point out that PKCS#5 and PKCS#7 actually specify exactly the same type of padding (they are the same!), but it’s called #5 when used in this context. :)

這位大俠給出的解釋是: PKCS#5和PKCS#7是一樣的padding方式, 對加密演算法一知半解, 我也只能暫且認可這個解釋了.

忙完了DES的加密, 接下來就是使用CryptoJS來解密了. 我們需要直接解密DES加密後的base64密文字元串. CryptoJS好像沒有提供直接解密DES密文字元串的方法啊, 他的整個加密/解密過程都是內部自己在玩, 解密時需要用到加密的結果對象, 這不是坑我嗎?

只好研究下CryptoJS DES加密後返回的對象, 發現有一個屬性ciphertext, 就是密文的WordArray, 那麼解密的時候, 我們是不是只要提供這個就行了呢?

var keyHex = CryptoJS.enc.Utf8.parse(‘abcd1234’);

// direct decrypt ciphertext

var decrypted = CryptoJS.DES.decrypt({

ciphertext: CryptoJS.enc.Base64.parse(‘8dKft9vkZ4I=’)

}, keyHex, {

mode: CryptoJS.mode.ECB,

padding: CryptoJS.pad.Pkcs7

});

console.log(decrypted.toString(CryptoJS.enc.Utf8));

果不其然, 到此為止, 問題全部解決, 豁然開朗…

完整代碼請參考CryptoJS-DES.html

Use CryptoJS encrypt message by DES and direct decrypt ciphertext, compatible with Java Cipher.getInstance(“DES”)

如何在mysql資料庫中加入加密演算法,使得資料庫能夠對資料庫中的數據進行加密。

沒有用過mysql加密,但一般都是用服務端語言把數據加密後存入資料庫中,比如,在PHP里用md5函數把用戶的密碼加密之後存入數據中,一般都 是這麼解決的。

MYSQL資料庫密碼欄位臨時加密問題?

看樓主的意思,應該是擔心用戶信息被泄露。但不知道另一個人操作時是否能操作當前用戶信息所在的資料庫,如果不操作,可以設置資料庫訪問許可權。

已經加密過的用戶密碼,看MD5加密的複雜度,要還原的可能性還是極低的。

確保操作期間所有的用戶不再登錄的情況下,可以先備份該表,然後臨時加密該表的密碼欄位。

可以用update 表名 set pwd = password(pwd) 來加密該欄位。註:password()函數用的是不可逆的加密演算法。等人家用完,你再還原該表就行了。

MYSQL數據表中要存儲密碼要用什麼類型

html。

那個pasword為*是可以輸出來的,如果要在mysql裡面存儲密碼,可以考慮用字元串類型 char(32) 32位,

然後將前台html裡面輸入的密碼用MD5多加密幾次(加密一次很容易破解),然後將加密後的密碼(32位)插入到資料庫中。

如果以後要實現登陸驗證功能,可以把用戶登陸的密碼MD5後再跟資料庫比較。

擴展資料:

MySQL需要注意的地方

1、如果客戶端和伺服器端的連接需要跨越並通過不可信任的網路,那麼就需要使用SSH隧道來加密該連接的通信。

2、用set password語句來修改用戶的密碼,三個步驟,先「mysql -u root」登陸資料庫系統,

然後「mysql update mysql.user set password=password(‘newpwd’)」,最後執行「flush privileges」就可以了。

3、需要提防的攻擊有,防偷聽、篡改、回放、拒絕服務等,不涉及可用性和容錯方面。對所有的連接、查詢、其他操作使用基於ACL即訪問控制列表的安全措施來完成。也有一些對SSL連接的支持。

4、除了root用戶外的其他任何用戶不允許訪問MySQL主資料庫中的user表; 加密後存放在user表中的加密後的用戶密碼一旦泄露,其他人可以隨意用該用戶名/密碼相應的資料庫;

5、用grant和revoke語句來進行用戶訪問控制的工作;

6、不使用明文密碼,而是使用md5()和sha1()等單向的哈系函數來設置密碼;

7、不選用字典中的字來做密碼;

8、採用防火牆來去掉50%的外部危險,讓資料庫系統躲在防火牆後面工作,或放置在DMZ區域中。

參考資料來源:百度百科-MySQL資料庫

mysql資料庫裡面的數據中的密碼加密了,怎麼解密

mysql -uroot -p 輸入密碼回車後,出現如下圖錯誤。這時候需要我們破解密碼。

service mysqld stop //先停止mysql服務。

然後打開mysql配置文件/etc/my.cnf.在【mysqld】下面添加一行代碼:skip-grant-tables。這行代碼意思就是跳過跳過授權表,即是可以跳過密碼驗證直接進入資料庫。

service mysqld restart //重啟mysql資料庫。假如不重啟的話,不會生效。

mysql -uroot -p //此時直接回車,既可以進入資料庫。

出現mysql就說明你已經進入到mysql資料庫里了。

進資料庫後,

use mysql //選擇mysql這個庫,因為mysql的root密碼存放在這個資料庫里。

show tables //查看下mysql庫里有哪些表,我們需要操作的用戶名密碼都在user表裡。

desc user //查看下user表有哪些欄位

更改root密碼。

update user set password=password(‘123456’) where user=”root”; //用戶選root,可以隨便更改成任意密碼,我這裡設置的123456,password()是mysql密碼加密的一個函數。

flush privileges; //刷新下密碼,使更改的生效。

exit //退出資料庫。

退出資料庫,重新登錄

mysql -uroot -p //回車輸入剛剛更改的密碼,就能進去了。

然後再次進入配置文件vi /etc/my.cnf 把skip-grant-tables去掉。

如何利用MySQL資料庫自帶加密函數進行加密

保護些數據免受黑客或者窺探者獲取令關注重要問題您既能讓未經授權員使用或者破壞應用程序同要保證您競爭優勢幸運MySQL帶設計用提供種類型安全加密函數本文概述其些函數並說明何使用及能夠提供同級別安全雙向加密讓我簡單加密始:雙向加密段數據通密鑰加密能夠由知道密鑰解密mysql兩函數支持種類型加密別叫做ENCODE()DECODE()面簡單實例:mysql

INSERT

INTO

users

(username,

password)

VALUES

(‘joe’,

ENCODE(‘guessme’,

‘abracadabra’));

Query

OK,

1

row

affected

(0.14

sec)其Joe密碼guessme通密鑰abracadabra加密要注意加密完結二進位字元串所示:mysql

SELECT

*

FROM

users

WHERE

username=’joe’;

+———-+———-+

|

username

|

password

|

+———-+———-+

|

joe

|

03?i?!?

|

+———-+———-+

1

row

in

set

(0.02

sec)abracadabra密鑰於恢復原始字元串至關重要密鑰必須傳遞給DECODE()函數獲原始、未加密密碼面使用:mysql

SELECT

DECODE(password,

‘abracadabra’)

FROM

users

WHERE

username=’joe’;+———————————+

|

DECODE(password,

‘abracadabra’)

|

+———————————+

|

guessme

|

$query

=

“SELECT

COUNT(*)

FROM

users

WHERE

username=’$inputUser’

AND

DECODE(password,

‘abracadabra’)

=

‘$inputPass'”;?提示:雖ENCODE()DECODE()兩函數能夠滿足數要求候您希望使用強度更高加密手段

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/200655.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-05 20:02
下一篇 2024-12-05 20:02

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的資料庫存儲引擎

    本文將介紹兩款高性能的資料庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • Python怎麼導入資料庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的資料庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL資料庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28

發表回復

登錄後才能評論