精選文章

bcp大量匯出與匯入資料庫資料方法

--匯出-- bcp "select * from [資料庫名稱].[dbo].[資料表名稱]" queryout 匯出檔案名稱.txt -w -U "使用者帳號" -P "使用者密碼" " "...

2019年1月25日 星期五

JS簡單的加密解密方法

說明:JS简单的加密解密方法

字符串加密
方法
    
/**
 * encrypto 加密程序
 * @param {Strng} str 待加密字符串
 * @param {Number} xor 异或值
 * @param {Number} hex 加密后的进制数
 * @return {Strng} 加密后的字符串
 */
function encrypto( str, xor, hex ) {
  if ( typeof str !== 'string' || typeof xor !== 'number' || typeof hex !== 'number') {
    return;
  }

let resultList = []; 
hex = hex <= 25 ? hex : hex % 25;

for ( let i=0; i < str.length; i++ ) {
    // 提取字符串每个字符的ascll码
    let charCode = str.charCodeAt(i);
    // 进行异或加密
    charCode = (charCode * 1) ^ xor;
    // 异或加密后的字符转成 hex 位数的字符串
    charCode = charCode.toString(hex);
    resultList.push(charCode);
  }
let splitStr = String.fromCharCode(hex + 97);
let resultStr = resultList.join( splitStr );
return resultStr;
}


字符串解密
方法
 
/**
 * decrypto 解密程序
 * @param {Strng} str 待加密字符串
 * @param {Number} xor 异或值
 * @param {Number} hex 加密后的进制数
 * @return {Strng} 加密后的字符串
 */
function decrypto( str, xor, hex ) { 
  if ( typeof str !== 'string' || typeof xor !== 'number' || typeof hex !== 'number') {
    return;
  }
  let strCharList = [];
  let resultList = []; 
  hex = hex <= 25 ? hex : hex % 25;
  // 解析出分割字符
  let splitStr = String.fromCharCode(hex + 97);
  // 分割出加密字符串的加密后的每个字符
  strCharList = str.split(splitStr);

  for ( let i=0; i < strCharList.length; i++ ) {
    // 将加密后的每个字符转成加密后的ascll码
    let charCode = parseInt(strCharList[i], hex);
    // 异或解密出原字符的ascll码
    charCode = (charCode * 1) ^ xor;
    let strChar = String.fromCharCode(charCode);
    resultList.push(strChar);
  }
  let resultStr = resultList.join('');
  return resultStr;
}


測試
方法
 
let s1 = 'hello world';

// 加密
s1 = encrypto(s1, 123, 25);
console.log('s1=', s1);
// s1= jz15znznzkz3gzczkz9znz16

// 解密
let s2 = decrypto(s1, 123, 25);
console.log('s2=', s2);
// s2= hello world

C#的解密方式
"ToInt32的基底,必須是 2、8、10 或 16"
方法
 
private string decrypto(string str)
        {
            string [] strCharList;
            List resultList=new List();
            
            // 解析出分割字符
            char splitStr = (char)(16 + 97);
            // 分割出加密字符串的加密後的每個字符
            strCharList = str.Split(splitStr);

            for (int i = 0; i < strCharList.Length; i++)
            {
                // 將加密後的每個字符轉成加密後的ascll碼
                int charCode = Convert.ToInt32(strCharList[i],16);
                // 異或解密出原字符的ascll碼
                charCode = (charCode * 1) ^ 123;
                char strChar = (char)(charCode);
                resultList.Add(strChar);
            }
            string resultStr = string.Join("", resultList);
            return resultStr;
        }

沒有留言: