国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

請大佬們幫忙一下,使用JavaScript的aesjs進行數(shù)據(jù)加密,如何轉(zhuǎn)化成PHP的加密方式

li914

這是 JavaScript的aesjs進行數(shù)據(jù)加密 代碼

const aesjs = require('aes-js');
const Counter = aesjs.Counter
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
const aesSuffix = '12345678'
const hexPrefix = '22222222'
const hexSuffix = '33333333'

const generateRandomNum = (min, max) => {
    if (max === undefined || min === undefined) {
        return false
    }
    const num = Math.floor(Math.random() * (max - min + 1) + min)
    return num
}
//對稱加解密code
const generateCode = (len = 8) => {
    const maxPos = chars.length
    let code = ''
    for (let i = 0; i < len; i++) {
        const randomNum = generateRandomNum(0, maxPos - 1)
        const char = chars.charAt(randomNum)
        code += char
    }
    return code
}

const encrypt = (data, key) => {
    const hexData = hexPrefix + Buffer.from(data).toString('hex') + hexSuffix
    console.log('hexData == ',hexData)
    console.log('key + aesSuffix == ',key + aesSuffix)
    const cipher = new aesjs.ModeOfOperation.ctr(Buffer.from(key + aesSuffix), new Counter(5))

    const encrypted = cipher.encrypt(Buffer.from(hexData, 'hex'))
    return Buffer.from(aesjs.utils.hex.fromBytes(encrypted)).toString('hex')
}

let key = generateCode();
let pass = encrypt('1a',key);

搞了一下午,沒有改成PHP的加密方式

1688 3 0
3個回答

liziyu

mark

nitron

你這個沒寫全啊..
decrypt沒寫,很多定西都沒法去,比如encrypt里頭尾加了東西
encrypt寫了, 但是在加密內(nèi)容頭尾加了料 2222222 就是4個雙引號, 3333333就是4個3
然后key size是要求16/24/32 bytes的,你這上面對key也沒做處理

按照你上面的代碼推斷,大概是下面這樣,你上面的generatecode和generaterandomnum沒用到,就不寫了

<?php

function run($data, $key) {
    $aesSuffix = '12345678';
    $hexPrefix = '22222222';
    $hexSuffix = '33333333';
    $algorithm = "aes-256-ctr";
    $buffer = bin2hex($data);
    $hexData = "{$hexPrefix}{$buffer}{$hexSuffix}";
    $key = bin2hex("{$key}{$aesSuffix}");
    $iv = "0000000000000005";   // Counter(5);
    // Encrypted
    $encrypted_data = openssl_encrypt($hexData, $algorithm, $key, OPENSSL_RAW_DATA, $iv);
    echo "Encrypted: ".bin2hex($encrypted_data).PHP_EOL;
    //Decrypt
    $decrypted_data = openssl_decrypt($encrypted_data, $algorithm, $key, OPENSSL_RAW_DATA, $iv);
    echo "Decrypted: ".$decrypted_data.PHP_EOL;
    $obuffer = ltrim($decrypted_data, $hexPrefix);
    $obuffer = rtrim($obuffer, $hexSuffix);
    echo $obuffer.PHP_EOL;
    echo hex2bin($obuffer);
}

run("you are not here", "b1234567");
  • li914 2022-05-10

    寫全了,只是忘了寫調(diào)用代碼

  • nitron 2022-05-10

    generatecode就是隨機從'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'拿8個出來當(dāng)key(默認8個),這個你可以自己實現(xiàn) , 加上aesSuffix的8個字母就是 16bytes, 我看aes-js的文檔,根據(jù)key長度用不同的方式
    16位就是用aes-128-ctr. 24是aes-196-ctr, 32是aes-256-ctr. 把我上面的aes-256-ctr改成aes-128-ctr就行

  • nitron 2022-05-10

    實際上改不改不影響,可以正常加解密

  • li914 2022-05-10

    謝謝大佬 今天上午我自己也搞了一個 只是我對 $hexData $iv 進行了 hex2bin 才得到的結(jié)果進行了 兩次 bin2hex 才得到j(luò)s的結(jié)果

li914

截圖

  • nitron 2022-05-10

    [捂臉],我寫的時候忘記把iv轉(zhuǎn)了, 因為counter(5)實際就是js的[00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,05],
    下午忙里偷閑寫的,就驗證了enc和dec的結(jié)果是否一致,沒有去跟你那個js的enc/dec做比較

  • li914 2022-05-10

    大佬威武

  • li914 2022-05-10

    謝謝大佬

  • nitron 2022-05-10

    補充一下,你那個$aesSuffix,$hexPrefix,$hexSuffix,還有iv可以單獨提出來做類成員,這樣做decrypt的時候會方便點

  • nitron 2022-05-10

    我不是大佬,你客氣了

  • li914 2022-05-10

    我只是進行寫驗證以及測試,具體使用不是我 --.--

年代過于久遠,無法發(fā)表回答
??