Add XCode skills for entity caching, ORM, and sharding ETL
|
---
applyTo: "**/Security/**"
---
# å®‰å…¨åŠ å¯†æ¨¡å—开呿Œ‡ä»¤
适用于 `NewLife.Security` 命åç©ºé—´ä¸‹çš„å®‰å…¨åŠ å¯†å¼€å‘。
---
## 1. 模å—结构
| 分类 | 类型 | 说明 |
|------|------|------|
| 扩展方法 | `SecurityHelper` | 统一入å£ï¼Œå“ˆå¸Œ/å¯¹ç§°åŠ å¯†/RC4 |
| éžå¯¹ç§° | `RSAHelper`ã€`ECDsaHelper` | RSA/ECDSA åŠ è§£å¯†ä¸Žç¾å |
| 国密 | `SM4` | 国密 SM4 å¯¹ç§°åŠ å¯†ï¼ˆç»§æ‰¿ `SymmetricAlgorithm`) |
| æµåР坆 | `RC4` | RC4 æµåР坆 |
| æ ¡éªŒ | `Crc16`ã€`Crc32`ã€`Murmur128` | æ•°æ®æ ¡éªŒ |
| è¯ä¹¦ | `Certificate` | X.509 è¯ä¹¦æ“作 |
| 密ç | `IPasswordProvider` | 密ç ç–略接å£ï¼ˆMD5/ç›å€¼/SCrypt ç‰ï¼‰ |
---
## 2. 哈希规范
- **MD5**:`data.MD5()` 返回 `Byte[]`,`str.MD5()` 返回 32 ä½åå…进制å—符串
- **MD5_16**:`str.MD5_16()` 返回 16 ä½ MD5
- **SHA 系列**:`data.SHA1(key)`ã€`data.SHA256(key)`ã€`data.SHA384(key)`ã€`data.SHA512(key)`
- `key` 傿•°éžç©ºæ—¶ä½¿ç”¨ HMAC å˜ä½“(`HMACSHA256` ç‰ï¼‰
- `key` 为 `null` 时使用普通哈希
- **Murmur**:`data.Murmur128(seed)` éžåŠ å¯†å“ˆå¸Œï¼Œé€‚åˆå¸ƒéš†è¿‡æ»¤å™¨ç‰åœºæ™¯
---
## 3. å¯¹ç§°åŠ å¯†è§„èŒƒ
æ‰€æœ‰å¯¹ç§°åŠ å¯†é€šè¿‡ `SecurityHelper` 扩展方法æ“作 `SymmetricAlgorithm`:
```csharp
// AES åŠ å¯†
var encrypted = Aes.Create().Encrypt(data, key, CipherMode.CBC, PaddingMode.PKCS7);
var decrypted = Aes.Create().Decrypt(encrypted, key, CipherMode.CBC, PaddingMode.PKCS7);
// SM4 å›½å¯†åŠ å¯†
var encrypted = SM4.Create().Encrypt(data, key, CipherMode.ECB);
```
**关键约定**:
- `pass` 傿•°ä¸ºå¯†é’¥ `Byte[]`,长度必须匹é…ç®—æ³•è¦æ±‚(AES: 16/24/32,SM4: 16)
- `pass` 为 `null` 时使用算法实例已设置的 `Key`
- CBC 模å¼éœ€è¦ IV,ECB 模å¼ä¸éœ€è¦
- 默认 `CipherMode.CBC` + `PaddingMode.PKCS7`
---
## 4. RSA 规范
### 4.1 密钥管ç†
- `RSAHelper.GenerateKey(keySize)` 返回 `[ç§é’¥XML, 公钥XML]`
- `RSAHelper.Create(key)` 自动识别 XML/PEM/Base64 æ ¼å¼å¯†é’¥
- 长期å˜å‚¨ç”¨ PEM æ ¼å¼ï¼Œè¿è¡Œæ—¶ä¼ 递用 Base64
### 4.2 åŠ è§£å¯†ä¸Žç¾å
- åŠ å¯†ï¼š`RSAHelper.Encrypt(data, pubKey, fOAEP)`,建议 `fOAEP = true`
- ç¾å有多ç§ç®—法:`Sign`(MD5)ã€`SignSha256`(RS256)ã€`SignSha384`ã€`SignSha512`
- **ç¦æ¢**用 MD5 ç¾å新代ç ,推è SHA256 åŠä»¥ä¸Š
---
## 5. 安全编ç è¦æ±‚
- ⌠硬编ç 密钥或ç›å€¼ï¼ˆåº”从é…ç½®/å¯†é’¥ç®¡ç†æœåŠ¡èŽ·å–)
- ⌠使用 ECB 模å¼åŠ å¯†è¶…è¿‡ä¸€ä¸ªå—的数æ®ï¼ˆä¿¡æ¯æ³„æ¼ï¼‰
- ⌠MD5 用于密ç å˜å‚¨ï¼ˆåº”使用 `IPasswordProvider` 带ç›å€¼ç–略)
- ⌠忽略 `SymmetricAlgorithm` 的 `Dispose`(必须释放)
- ✅ 密钥/æ•æ„Ÿæ•°æ®ç”¨åŽæ¸…零:`Array.Clear(keyBytes, 0, keyBytes.Length)`
- ✅ éšæœºæ•°ç”Ÿæˆä½¿ç”¨ `RandomNumberGenerator`,ä¸ç”¨ `Random`
|