Herbert Gao

Never be satisfied

Hi there, I'm herbert gao, a Developer from China. Live in Chengdu, work in IBM.


Welcome to onboard

Javascript String Xor Operation

JavaScript中字符串是不可变的,因此不能直接进行异或运算。但是,我们可以将字符串转换为数字数组,然后对每个数字进行异或运算,最后将得到的结果转换回字符串。

下面是一个使用异或运算加密字符串的示例代码:

// 将字符串转换为数字数组
function stringToByte(str) {
  var arr = [];
  for (var i = 0; i < str.length; i++) {
    arr.push(str.charCodeAt(i));
  }
  return arr;
}

// 将数字数组转换回字符串
function byteToString(arr) {
  var str = "";
  for (var i = 0; i < arr.length; i++) {
    str += String.fromCharCode(arr[i]);
  }
  return str;
}

// 对每个字符进行异或运算
function xorEncrypt(str, key) {
  var bytes = stringToByte(str);
  var keyBytes = stringToByte(key);
  
  for (var i = 0; i < bytes.length; i++) {
    bytes[i] ^= keyBytes[i % keyBytes.length];
  }
  
  return byteToString(bytes);
}

// 测试代码
var plaintext = "Hello, world!";
var key = "secret";

console.log("Plaintext: ", plaintext);

var ciphertext = xorEncrypt(plaintext, key);

console.log("Ciphertext: ", ciphertext);

var decryptedText = xorEncrypt(ciphertext, key);

console.log("Decrypted text: ", decryptedText);

需要注意的是,因为JavaScript中的数字类型是双精度浮点数,因此在进行位运算时,需要将数字转换为32位整数。可以使用« 0或者»> 0操作符来实现这个功能。

最近的文章

vue transition-group 添加缓动效果

原理vue transition-group缓动效果的原理添加moveClass, moveClass的特性核心代码在 transition-group 组件中的 update 钩子中(在修改数据时就会触发这个函数):1、获取 moveClass,如果没有在 transition-group 组件节点中定义 moveClass 属性,那么就在 name 属性值后面拼接 move;2、如果没有子节点或者检测到子节点没有通过 transition 监听 transform 或者 all(通过 ...…

svg继续阅读
更早的文章

vue-quill-editor 工具栏自定义字体大小选项

背景在项目中使用富文本编辑器vue-quill-editor, 但是组件默认可选的文字大小仅有四种并且不是设置的行内样式,在编辑的富文本内容脱离了框架之外则不能正常显示设置的样式。Baidu了好多之后发现都是通过修改node_modules中quill编译之后的代码,但是这并不是我想要的。在打开正确上网方式网上冲浪之后找到最终的解决方案。 BTW: 墙裂建议大家不要直接修改node_modules中的js、css修改之后的效果修改步骤1.注册并添加白名单import { Quill } ...…

quill 富文本编辑器继续阅读