老派java+eclipse+sprint boot遇到3DES加密問題

API,傳資料只用簡單的3DES加解密,但是java 預設只有3DES的PKCS5Padding,要達到PKCS7Padding(windows c# 只支援PKCS7Padding),就只能請Bouncy Castle幫忙,我使用bcprov-jdk15to18-1.78.1.jar、jdk17。

程式改寫大概如下:

// java 只有padding5,用bouncycastle,改寫成可使用padding7
static {
if(Security.getProvider("BC")!=null) Security.removeProvider("BC");
Security.addProvider(new BouncyCastleProvider());
}


// 使用CBC、PKCS7Padding
原本寫法
Cipher decryptCipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
改成
Cipher decryptCipher = Cipher.getInstance("DESede/CBC/PKCS7Padding","BC");

在Eclipse開發時很正常,正式執行時,出現以下錯誤:

jce cannot authenticate the provider bc

我查了一下原來jdk 17是17.0.9版,這問題於jdk 17.0.10(2024年1月)解決,就這麼剛好只差一版;最後,我升級至目前最新 jdk17.0.12版就解決了。參考來源


另外 windows uwp c#寫法也幾乎一至,因java是API,windows app為client,所以也就順手了解一下

public static String Encrypt3DesCbcPKCS7Padding(String sIV,String sSecretKey, String sData)
{
TripleDES tdes = TripleDES.Create();
IvParameterSpec ivSpec = new IvParameterSpec(System.Text.Encoding.UTF8.GetBytes(sIV));
SecretKeySpec secretKeySpec = new SecretKeySpec(System.Text.Encoding.UTF8.GetBytes(sSecretKey), "DESede");
Cipher encryptCipher = Cipher.GetInstance("DESede/CBC/PKCS7Padding", "BC");
encryptCipher.Init(Cipher.ENCRYPT_MODE, secretKeySpec, ivSpec);
return Base64.ToBase64String(encryptCipher.DoFinal(System.Text.Encoding.UTF8.GetBytes(sData)));

}

原來我離excel這麼遠

公司來了一位excel很強的財務主管,建議我公司全面換成office 365,這樣就能擁有office 365專屬的函式,例如 sort

可惜公司不會全部(含各廠)升級到o365;沒關係,我們還有vba。

(一)先開啟開發人員功能(方便執行)或是按下 Alt+F11 直接叫出vba來。

(二)寫VBA

Sub SortData()

Range("A:G").Sort , _
Key1:=Range("E2"), Order1:=xlAscending, _
Key2:=Range("D2"), Order2:=xlDescending, _
Header:=xlYes

End Sub

(三)打開Excel表格,輸入ALT+F8執行巨集(VBA)
即可進行排序

docker安裝老牌「會議室預約系統(MRBS)」

幾年前為了讓公司習慣nextcloud,決心將原本安裝的會議室預約系統停用,改為nextcloud上面的行事曆,但是nextcloud上面的行事曆讓公司老屁股覺得難用,直到最近我覺得大家已經習慣nextcloud,於是答應恢復原本的會議室預約系統。

以前是mrbs直接安裝,現在新版已經能使用docker安裝,非常方便。

meeting-room-booking-system

安裝步驟如下:

git clone https://github.com/meeting-room-booking-system/mrbs-code.git
cd mrbs-code/docker_app/

vi php/config.inc.php
#########################
$auth["type"] = "ldap";
$ldap_host = "192.168.1.1";
$ldap_v3 = true;
$ldap_tls = false;
$ldap_base_dn = "OU=xxx,DC=test,DC=com,DC=tw";
$ldap_user_attrib = "sAMAccountName";
$ldap_port = 389;
$ldap_debug = true;
$ldap_dn_search_attrib = "sAMAccountName";
$ldap_dn_search_dn = "CN=xxxxx,CN=Users,DC=test,DC=com,DC=tw";
$ldap_dn_search_password = "password";
$mrbs_company = "XXX公司";

# AD登入帳號,那些可成為管理者
$auth["admin"][] = "xxxx";
$auth["admin"][] = "yyyy";
##########################


#然後修改 docker-compose.yml,看看還有沒需要修改的
#檢查完畢,就執行
docker compose up -d

因為我與Micro$oft AD整合,需要額外安裝php ldap元件

docker exec -it docker_app-www-1 bash

# 進入容器後,安裝ldap套件
apt update && apt-get install libldap2-dev -y
docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/
docker-php-ext-install ldap

#安裝完畢重開容器,就可以跟AD整合了
docker compose restart

RockyLinux 9 /etc/fstab 掛載新的磁碟

以前掛載新的磁碟或分區(partition),只要確認磁碟在哪就可以直接掛載上去。

例如新的磁碟在/dev/sdb1 ,就可以直接寫在fstab,執行systemctl daemon-reload,重開機就能直接掛載辛的磁碟機。

/dev/sdb1  /docker   xfs   defaults   1 1

沒想到我這次栽了跟斗,RL9重開機後系統直接掛掉,原來是新磁碟機從sdb變成sda,而原本開機的sda變成sdb;我更正後重開機,又亂變代號,此時系統正式掛掉,只能重新安裝。

我後來才發現,fstab早就改成UUID的掛載方式,讓UUID自動綁定磁碟代號,以往我沒遇到問題,直到用了RL9,甚至AlmaLinux也是一樣狀況。

輸入 ls -al /dev/disk/by-uuid 可以查看磁碟對應的UUID

1 2 3 4 ... 76