生成密钥

//S-DES 第一部分 生成密钥
let secretKey = "0111111101";
const p10=[2, 4, 1, 6, 3, 9, 0, 8, 7, 5];
const p8 = [5, 2, 6, 3, 7, 4, 9, 8];

const substituteMaker = (translate) => {
    //生成置换函数
    return (key) => {
        let res = [];
        for (let i = 0; i < translate.length; i++) {
            res.push(key[translate[i]]);
        }
        return res.join('');
    }


}

secretKey = substituteMaker(p10)(secretKey);

const l1 = (key,count=1) => {
    let keyArr = key.split('');
    let l = keyArr.slice(0, 5);//不包括end
    let r = keyArr.slice(5, 10);
    for(let i=0;i<count;i++){
        l.push(l.shift());
        r.push(r.shift());
    }
    return l.concat(r).join('');
}

secretKey = l1(secretKey)



const key1 = substituteMaker(p8)(secretKey);
console.log('key1',key1);

secretKey = l1(secretKey,2)

const key2 = substituteMaker(p8)(secretKey);
console.log('key2',key2);

//key1 01011111
//key2 11111100



//S-DES 第二部分 加密
const cipherText="10100010";

加密演示

http://demo.guohere.com/sdes/