簡體   English   中英

通過 X509Certificate2 快速檢查加密值

[英]Fast checking for encrypted values by X509Certificate2

我在一個集合中有許多不同的字符串值。

一些值由X509Certificate2加密。 所有其他值是數字、非加密字符串、日期等。

我的目標是過濾可能的解密候選者。 所以我想使用一個函數來實現對加密值的第一次快速過濾

我使用這個簡單的檢查:

private bool IsEncryptedValue(string value)
{
    var result = !string.IsNullOrEmpty(value) && IsBase64String(value);
    return result;
}

請提供更正確(更強大)的檢查加密值的規則。

感謝您的任何建議。

任何現代密碼的密文都是二進制的。 如果密文在一個字符串中,我希望它已經使用 base 64(或方言)或十六進制編碼。 解碼后,如果使用了直接 RSA 加密,它應該正是密鑰大小。 如果使用了混合密碼系統,那么它至少應該是密鑰大小。

當然,您必須找出使用了哪種 RSA 加密方案,在混合加密的情況下,您還必須找出使用了哪種對稱加密方案。 可能是加密使用了已知的容器格式,例如 CMS 或 PGP,因此您也可以對其進行掃描。

最后,雖然不太可能:原則上 RSA 加密的結果是一個數字。 如果該數字以小數形式存儲,則它應該具有 keysize / 3.32192809 或更少的數字。


原則上,密碼的結果是隨機的,因此我們沒有太多可以將其與任何其他編碼區分開來。 您可以嘗試驗證它是否是隨機的,但如果您只有一個小的密文,那么估計隨機性的數量就比較棘手 - 所以我沒有在我的答案中包含它。

不過,這是一項奇怪的嘗試,通常您會知道某事是否是密文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM