优化 b64u 的定义,用 . 代替 -,因为 - 和空格一样导致 css white-space 自动换行
This commit is contained in:
parent
fcf41dd77e
commit
b2abb16e81
30
index.js
30
index.js
@ -726,7 +726,7 @@ class TICrypto {
|
|||||||
if (hex) {
|
if (hex) {
|
||||||
return hex.slice(2) // 去除网络前缀
|
return hex.slice(2) // 去除网络前缀
|
||||||
}
|
}
|
||||||
} else if (/^[Tt][0-9a-zA-Z\-_]{31}$/.test(address)) { // TIC
|
} else if (/^[Tt][0-9a-zA-Z\._]{31}$/.test(address)) { // TIC
|
||||||
// 格式合法
|
// 格式合法
|
||||||
let hex = this.b64u2hex(address)
|
let hex = this.b64u2hex(address)
|
||||||
let [all, prefix, position, checksum] = hex.match(/^([\da-fA-F]{2})([\da-fA-F]{40})([\da-fA-F]{6})$/)
|
let [all, prefix, position, checksum] = hex.match(/^([\da-fA-F]{2})([\da-fA-F]{40})([\da-fA-F]{6})$/)
|
||||||
@ -754,10 +754,9 @@ class TICrypto {
|
|||||||
if (prefixedPosition && prefixedPosition.length === 42)
|
if (prefixedPosition && prefixedPosition.length === 42)
|
||||||
// 内容合法
|
// 内容合法
|
||||||
return 'BTC'
|
return 'BTC'
|
||||||
} else if (/^[Ttd][0-9a-zA-Z\-_]{31}$/.test(address)) {
|
} else if (/^[Ttd][0-9a-zA-Z\._]{31}$/.test(address)) {
|
||||||
// 格式合法
|
// 格式合法
|
||||||
let b64 = address.replace('-', '+').replace('_', '/')
|
let hex = Buffer.from(this.b64u_to_b64(address), 'base64').toString('hex')
|
||||||
let hex = Buffer.from(b64, 'base64').toString('hex')
|
|
||||||
let [all, prefix, position, checksum] = hex.match(/^([\da-fA-F]{2})([\da-fA-F]{40})([\da-fA-F]{6})$/) // 内容合法
|
let [all, prefix, position, checksum] = hex.match(/^([\da-fA-F]{2})([\da-fA-F]{40})([\da-fA-F]{6})$/) // 内容合法
|
||||||
if (this.hash(this.hash(prefix + position)).slice(0, 6) === checksum)
|
if (this.hash(this.hash(prefix + position)).slice(0, 6) === checksum)
|
||||||
// [todo] 校验码里要不要包含 prefix?
|
// [todo] 校验码里要不要包含 prefix?
|
||||||
@ -1254,6 +1253,22 @@ class TICrypto {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* b64 字符串为 a-zA-Z0-9+/
|
||||||
|
* 其中,+ 和 / 会在 url query string 里被转成 %2B 和 %2F
|
||||||
|
* 因此定义 b64u (base64 for url),用 . 和 _ 替换。
|
||||||
|
* (为何不用 -,因为 - 和空格一样导致 css white-space 自动换行。)
|
||||||
|
* @param {*} b64
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
static b64_to_b64u(b64='') {
|
||||||
|
return b64.replace(/\+/g, '.').replace(/\//g, '_').replace(/=/g, '')
|
||||||
|
}
|
||||||
|
|
||||||
|
static b64u_to_b64(b64u='') {
|
||||||
|
return b64u.replace(/\./g, '+').replace(/_/g, '/')
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 十六进制转b64u
|
* 十六进制转b64u
|
||||||
*
|
*
|
||||||
@ -1264,7 +1279,7 @@ class TICrypto {
|
|||||||
*/
|
*/
|
||||||
static hex2b64u(hex) {
|
static hex2b64u(hex) {
|
||||||
if (/^[0-9a-fA-F]+$/.test(hex)) {
|
if (/^[0-9a-fA-F]+$/.test(hex)) {
|
||||||
return Buffer.from(hex, 'hex').toString('base64').replace(/\+/g, '-').replace(/\//g, '_')
|
return this.b64_to_b64u(Buffer.from(hex, 'hex').toString('base64'))
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
@ -1278,9 +1293,8 @@ class TICrypto {
|
|||||||
* @memberof TICrypto
|
* @memberof TICrypto
|
||||||
*/
|
*/
|
||||||
static b64u2hex(b64u) {
|
static b64u2hex(b64u) {
|
||||||
if (/^[0-9a-zA-Z\-_]+$/.test(b64u)) {
|
if (/^[0-9a-zA-Z\._]+$/.test(b64u)) {
|
||||||
let b64 = b64u.replace(/\-/g, '+').replace(/_/g, '/')
|
return Buffer.from(this.b64u_to_b64(b64u), 'base64').toString('hex')
|
||||||
return Buffer.from(b64, 'base64').toString('hex')
|
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user