Delphi Base32 的加密和解密

2021-09-29 18:38:49 字數 1741 閱讀 8449

const

validchars = 'abcdefghijklmnopqrstuvwxyz234567';

// base32解碼

function base32decode(const source: string): string;

var uppersource: string;

p, i, l, n, j: integer;

begin

uppersource := uppercase(source);

l := length(source);

n := 0;

j := 0;

result := '';

for i := 1 to l do

begin

n := n shl 5; // move buffer left by 5 to make room

p := pos(uppersource[i], validchars);

if p >= 0 then

n := n + (p - 1); // add value into buffer

j := j + 5; // keep track of number of bits in buffer

if (j >= 8) then

begin

j := j - 8;

result := result + chr((n and ($ff shl j)) shr j);

end;

end;

end;

// base32編碼

function base32encode(str: utf8string): string;

var b: int64;

i, j, len: integer;

begin

result := '';

//每5個字元一組進行編碼(5個字元x8=40位,5位*8字元=40位,base32每個字元用5位表示)

len := length(str);

while len > 0 do

begin

if len >= 5 then

len := 5;

//將這5個字元的ascii碼按順序存放到int64(共8個位元組)整數中

b := 0;

for i := 1 to len do

b := b shl 8 + ord(str[i]); //存放乙個字元,左移乙個位元組(8位)

b := b shl ((8 - len) * 8); //最後再左移3個位元組(3*8)

j := system.math.ceil(len * 8 / 5);

//編碼,每5位表示乙個字元,8個字元剛好是40位

for i := 1 to 8 do

begin

if i <= j then

begin

result := result + validchars[b shr 59 + 1]; //右移7*8位+3位,從base32表中取字元

b := b shl 5; //每次左移5位

endelse

result := result + '=';

end;

//去掉已處理的5個字元

delete(str, 1, len);

len := length(str);

end;

end;

使用

STM32 加密思考

使用系統啟動程式stm32 flash loader demonstrator將flash設定為讀保護。所有以除錯工具 內建sram或fsmc執行 等方式對主儲存器訪問的操作將被禁止,只允許使用者 對主flash儲存器的讀操作和程式設計操作 除了flash開始的4kb區域不能程式設計 使用者 允許自...

STM32使用mbedtls的AES加密

轉到keil官網 找到arm mbed cryptographic and ssl tls library for cortex m devices 載入mbedtls 修改mbedtls config.件。需要啟用的巨集如下。define mbedtls aes rom tables define...

STM32使用mbedtls的AES加密

author 果果小師弟 電子資訊專業在讀研究生 有一點思考,有一點想法,有一點理性!定個小小目標,努力成為習慣!在最美的年華遇見更好的自己!csdn 果果小師弟,csdn首發,果果原創 轉到keil官網載入mbedtls 2.修改mbedtls config.件。需要啟用的巨集如下。define ...