Skip to main content

passekys

alt text

aaguid: rc4AAjW8xgpkiwsl8fBVAw chrome iCloud Keychain
aaguid: -_wwBxVOTsyMC24CBVfXvQ chrome passkeys

nodejs -> java

要将带有分隔符的十六进制字符串转换回字节数组,并最终转换回Base64URL编码字符串,可以按照以下步骤进行:

  1. 移除十六进制字符串中的分隔符。
  2. 将十六进制字符串转换回字节数组。
  3. 将字节数组转换回Base64字符串。
  4. 将Base64字符串转换为Base64URL字符串。

以下是完整的JavaScript示例代码:

function hexStringToByteArray(hexString) {
// 移除分隔符
hexString = hexString.replace(/-/g, '');

let byteArray = new Uint8Array(hexString.length / 2);
for (let i = 0; i < hexString.length; i += 2) {
byteArray[i / 2] = parseInt(hexString.substr(i, 2), 16);
}
return byteArray;
}

function byteArrayToBase64Url(byteArray) {
let binaryString = '';
for (let i = 0; i < byteArray.length; i++) {
binaryString += String.fromCharCode(byteArray[i]);
}

// 将字节数组转换为Base64字符串
let base64String = btoa(binaryString);

// 将Base64字符串转换为Base64URL字符串
let base64UrlString = base64String.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
return base64UrlString;
}

// 示例十六进制字符串
let hexString = "adce0002-35bc-c60a-648b-0b25-f1f05503";

// 将十六进制字符串转换回字节数组
let byteArray = hexStringToByteArray(hexString);

// 将字节数组转换回Base64URL字符串
let base64UrlString = byteArrayToBase64Url(byteArray);

console.log(byteArray); // 输出:Uint8Array(16) [ 173, 206, 0, 2, 53, 188, 198, 10, 100, 139, 11, 37, 241, 240, 85, 3 ]
console.log(base64UrlString); // 输出:rc4AAiW8xapkiwsl8fVAw

在这个示例代码中:

  • hexStringToByteArray 函数移除十六进制字符串中的分隔符,并将其转换为字节数组。
  • byteArrayToBase64Url 函数将字节数组转换为Base64字符串,然后再转换为Base64URL字符串。

通过这些步骤和代码,你可以将带有分隔符的十六进制字符串转换回Base64URL编码字符串。

java -> nodejs

function base64UrlToByteArray(base64UrlString) {
// 将Base64URL字符串转换回标准的Base64字符串
let base64String = base64UrlString.replace(/-/g, '+').replace(/_/g, '/');

// 添加必要的填充字符
while (base64String.length % 4) {
base64String += '=';
}

// 将Base64字符串转换回普通字符串
let binaryString = atob(base64String);

// 将普通字符串转换回字节数组
let byteArray = new Uint8Array(binaryString.length);
for (let i = 0; i < binaryString.length; i++) {
byteArray[i] = binaryString.charCodeAt(i);
}

return byteArray;
}

function byteArrayToHexString(byteArray) {
let hexString = '';
for (let i = 0; i < byteArray.length; i++) {
let hex = (byteArray[i] & 0xFF).toString(16);
hexString += (hex.length === 1 ? '0' : '') + hex;
}

// 在适当位置插入分隔符
return [
hexString.slice(0, 8),
hexString.slice(8, 12),
hexString.slice(12, 16),
hexString.slice(16, 20),
hexString.slice(20)
].join('-');
}

// 示例Base64URL字符串
let base64UrlString = "rc4AAiW8xapkiwsl8fVAw";

// 将Base64URL字符串转换回字节数组
let byteArray = base64UrlToByteArray(base64UrlString);

// 将字节数组转换回十六进制字符串,并添加分隔符
let hexString = byteArrayToHexString(byteArray);

console.log(byteArray); // 输出:[-83, -50, 0, 2, 53, -68, -58, 10, 100, -117, 37, -15, -16, 85, 3]
console.log(hexString); // 输出:adce0002-35bc-c60a-648b-0b25-f1f05503