加密的簡單介紹

2021-07-25 07:22:37 字數 3487 閱讀 1025

編碼解碼,加密解密,摘要

1、 base64

用法

base64.encode(content.getbytes(), base64.default)

base64.decode(content.getbytes(), base64.default)

原理 通過ascii 表和base64 的表不斷的 比對和切換

1 把得到的byte 按六位 切出來

2 把切出來的結果 傳化成十進位制

3 然後去base64 裡面去查表

4 得到的結果 從左到右拼接成字串

2、urlencoder 和urldecoder

用處:在客戶端和服務端 傳遞中文字元和特殊字元的時候,為了防止亂碼的情況 就要使用 urlencoder 和urldecoder

用法:urlencoder.encode(); urldecoder.decode()

原理:和base64 同理,也是不斷查表,不斷切分

3、aes 加密解密

用處:用於把檔案和字串加密和解密 他需要設定密碼 並且密碼的長度 必須是16、24 、32 個字元

用法  

//初始化密文

cipher cipher = cipher.getinstance("aes");

// 初始化密碼

secretkeyspec key = new secretkeyspec(password.getbytes(),"aes");

// 確定是加密還是解密

cipher.init(cipher.encrypt_mode,key);

// 加密

byte encodebytes = cipher.dofinal(encodestring.getbytes());

//加密出來的結果必須經過base64處理一下,然後才不會出現亂碼的情況 ,才能正常的解密回去

byte encode = base64.encode(encodebytes, base64.default);

string encoderesult = new string(encode);

mtextviewresult.settext(encoderesult);

解密的過程 和加密的過程是相反的

需要注意到是,我們的結果是經過了base64處理後的結果,所以在解密之前得通過base64 解碼回來

注意: aes 的密碼的長度要求是16 、24 、32 位 ,如果是其他的情況,那麼就不能進行加密和解密

4、 des 加密

//初始化密文

cipher cipher = cipher.getinstance("des");

// 初始化密碼 注意 密碼的長度必須要求是8位 這個是和aes 的區別

secretkeyspec key = new secretkeyspec(password.getbytes(),"des");

// 設定加密或者是解密的模式

cipher.init(cipher.encrypt_mode,key);

//開始加密

byte encodebytes = cipher.dofinal(content.getbytes());

// 為了防止出現加密出來byte陣列出現亂碼的情況,我們把得到byte陣列 通過base64處理

byte encode = base64.encode(encodebytes, base64.default);

mtextviewresult.settext(new string(encode));

解密

cipher cipher = cipher.getinstance("des");

secretkeyspec keys = new secretkeyspec(passwords.getbytes(),"des");

cipher.init(cipher.decrypt_mode,keys);

// 因為我們加密的結果通過了base64編碼過,所以,當我們拿到加密後的結果的時候,我們應該把結果通過base64解密回來

// 然後在進行解密

byte resultbytes = cipher.dofinal(decodebytes);

mtextviewresult.settext(new string(resultbytes));

5、rsa 加密

1. 在加密或者解密之前必要要有 公鑰或者私鑰 (這個公鑰和私鑰不是輸入的,而是直接生成的)

//初始化密文

cipher cipher = cipher.getinstance("rsa");

設定加密或者是解密的模式

cipher.init(cipher.encrypt_mode,publickey);

//開始加密

byte encodebytes = cipher.dofinal(content.getbytes());

// 為了防止出現加密出來byte陣列出現亂碼的情況,我們把得到byte陣列 通過base64處理

byte encode = base64.encode(encodebytes, base64.default);

mtextviewresult.settext(new string(encode));

2. 在解密的時候 ,一般的情況 ,不會讓你自己生成乙個私鑰或者公鑰來進行加密解密,因為我們操作的客戶端,

一般情況下,都是服務端直接給我們乙個字串,讓我們自己去生成乙個 與伺服器相對應的私鑰或者公鑰

2.1 我們要通過字串生成乙個公鑰或者私鑰

// 通過獲取的字串(私鑰的字串)來生成 乙個私鑰

byte keybytes = base64.decode(privatekeystr.getbytes(), base64.default);

// 通過字元陣列 來生成 公鑰或者私鑰

pkcs8encodedkeyspec spec = new pkcs8encodedkeyspec(keybytes);

keyfactory factory = keyfactory.getinstance("rsa");

生成了私鑰

privatekey privatekey = factory.generateprivate(spec);

2.2 解密

// 先解碼再解碼

byte decode = base64.decode(encoderesult.getbytes(), base64.default);

cipher cipher = cipher.getinstance("rsa");

cipher.init(cipher.decrypt_mode,privatekey);

byte dofinal = cipher.dofinal(decode);

CA加密介紹

因為cw是隨加擾資訊一起通過公用網傳輸,任何人都可以讀取研究它,一旦cw被讀取破解,那麼整個系統就癱瘓了,所以對cw本身就要用乙個加密金鑰通過加密演算法來對它進行加密保護。在具體應用中,這個金鑰可以按照網路運營商要求經常加以改變,通常由服務商提供,用來控制其提供的服務,所以把它稱為業務金鑰 serv...

最簡單的加密

最簡單的加密 package com.util 類 介面的目的 作用 功能 繼承於何種父類,實現的介面 實現的演算法 使用方法 示例程式.version v1.0 2012 3 22 author xiahui public class encrypt system.out.print 加密 s n...

常見的加密系統介紹

加密系統在企業中有三個基本的部署方向,分別是儲存 傳輸和認證。因為網際網路並非可信傳輸渠道,有可能存在監聽 攔截和惡意修改等多種威脅,因此傳輸方向為企業對加密系統需求最大的方向。隨著企業內部對本地資料安全的日益重視,儲存方面尤其是移動裝置的儲存加密市場也越來越熱,大有後來居上的勢頭。儲存方面 加密系...