XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/bilibili-API-collect

Update APP.md (#911)

添加了Swift语言的支持

faa3d97
Lightning-Lion <85005672+Lightning-Lion@users.noreply.github.com>
提交于

代码差异

1 个文件 +49 -1
Modified docs/misc/sign/APP.md +49 -1
@@ -23,7 +23,7 @@
23 23
24 24 ## Demo
25 25
26 该 Demo 提供 [Python](#Python) 和 [Java](#Java) 语言例程
26 该 Demo 提供 [Python](#Python) 和 [Java](#Java) 和 [TS/JS](#TypeScript/JavaScript) 和 [Swift](#Swift) 语言例程
27 27
28 28 使用 appkey = `1d8b6e7d45233436`, appsec = `560c52ccd288fed045859ed18bffd973` 对如下 `params` 参数进行签名
29 29
@@ -166,3 +166,51 @@ console.log(
166 166 ```
167 167
168 168 输出结果为:01479cf20504d865519ac50f33ba3a7d
169
170 ### Swift
171
172 ```swift
173 import Foundation
174 import CommonCrypto
175
176 //Swift标准库没有MD5函数,所以我们要自己实现一个
177 func MD5(string: String) -> String {
178 let length = Int(CC_MD5_DIGEST_LENGTH)
179 var digest = [UInt8](repeating: 0, count: length)
180
181 if let d = string.data(using: .utf8) {
182 _ = d.withUnsafeBytes { body -> String in
183 CC_MD5(body.baseAddress, CC_LONG(d.count), &digest)
184 return ""
185 }
186 }
187
188 return (0..<length).reduce("") {
189 $0 + String(format: "%02x", digest[$1])
190 }
191 }
192
193 func appSign(params: [String:String],appKey:String,appSec:String) -> String {
194 var signedParams = params
195 signedParams["appkey"] = appKey
196 let sortedParams = signedParams.sorted { $0.key < $1.key }
197 //在制作成query时,需要显式addingPercentEncoding转换
198 let query = sortedParams.map { "\($0.key)=\($0.value.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)" }.joined(separator: "&")
199 let sign = MD5(string: query+appSec)
200 return sign
201 }
202
203
204 //testSign
205 let appKey = "1d8b6e7d45233436"
206 let appSec = "560c52ccd288fed045859ed18bffd973"
207 let signResult = appSign(params: [
208 "id": "114514",
209 "str": "1919810",
210 "test": "いいよ,こいよ",
211 ],appKey:appKey,appSec:appSec)
212 print(signResult)
213 ```
214
215 输出结果为:01479cf20504d865519ac50f33ba3a7d
216