# 加密地址栏参数 query string

# 1. 介绍

加密 query string,避免篡改

# 2. 示例

const QUERY_STRING_PARAMS_NAME = 'params';

// {name: '张三'} -> params=abcefg
export function encodeUrlQueryString(params: object) {
  const newParams = { ...params };

  Object.getOwnPropertyNames(newParams).forEach((key) => {
    if (newParams[key] == null) {
      delete newParams[key];
    }
  });

  const paramsString = JSON.stringify(newParams);

  const paramsStringUrlEncode = encodeURIComponent(paramsString);

  const paramsStringUrlEncodeBase64 = window.btoa(paramsStringUrlEncode);

  return { [QUERY_STRING_PARAMS_NAME]: paramsStringUrlEncodeBase64 };
}

// params=abcefg -> {name: '张三'}
export function decodeUrlQueryString(query: { [QUERY_STRING_PARAMS_NAME]: string }) {
  const { [QUERY_STRING_PARAMS_NAME]: paramsStringUrlEncodeBase64 } = query;

  const paramsStringUrlEncode = window.atob(paramsStringUrlEncodeBase64);

  const paramsString = decodeURIComponent(paramsStringUrlEncode);

  const params = JSON.parse(paramsString);

  return params;
}
本章目录