我正在寻找一种方法来转换长字符串(从转储),它表示十六进制值到一个字节数组.
但为了保持原创,我会用自己的方式来表达它:假设我有一个"00A0BF"我想要解释为的字符串
byte[] {0x00,0xA0,0xBf}
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
我是Java新手,最后使用BigInteger并注意领先的十六进制零.但我觉得它很难看,我确信我错过了一些简单的东西.
我有以下基于cryptojs的javascript加密/解密函数,它们工作得很好.
我使用随机盐,随机iv值和特定密码,同时使用cryptpjs加密消息.我重复使用相同的salt,iv和密码来生成密钥,同时解密加密的消息.
这部分效果很好..
function encrypt(){
var salt = CryptoJS.lib.WordArray.random(128/8);
var iv = CryptoJS.lib.WordArray.random(128/8);
console.log('salt '+ salt );
console.log('iv '+ iv );
var key128Bits = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 128/32 });
console.log( 'key128Bits '+ key128Bits);
var key128Bits100Iterations = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 128/32, iterations: 100 });
console.log( 'key128Bits100Iterations '+ key128Bits100Iterations);
var encrypted = CryptoJS.AES.encrypt("Message", key128Bits100Iterations, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
console.log('encrypted '+ encrypted );
}
function decrypt(){
var salt = CryptoJS.enc.Hex.parse("4acfedc7dc72a9003a0dd721d7642bde");
var iv = CryptoJS.enc.Hex.parse("69135769514102d0eded589ff874cacd");
var …Run Code Online (Sandbox Code Playgroud) 我有一个密码,可以通过JavaScript加密
var password = 'sample'
var passphrase ='sample_passphrase'
CryptoJS.AES.encrypt(password, passphrase)
Run Code Online (Sandbox Code Playgroud)
然后我尝试解密密码来自Python中的JavaScript:
from Crypto.Cipher import AES
import base64
PADDING = '\0'
pad_it = lambda s: s+(16 - len(s)%16)*PADDING
key = 'sample_passphrase'
iv='11.0.0.101' #------> here is my question, how can I get this iv to restore password, what should I put here?
key=pad_it(key) #------> should I add padding to keys and iv?
iv=pad_it(iv) ##
source = 'sample'
generator = AES.new(key, AES.MODE_CFB,iv)
crypt = generator.encrypt(pad_it(source))
cryptedStr = base64.b64encode(crypt)
print cryptedStr
generator = AES.new(key, …Run Code Online (Sandbox Code Playgroud) 我在JavaScript中加密我的用户密码,如下所示:
var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase");
Run Code Online (Sandbox Code Playgroud)
它工作正常,但现在我试图在服务器端解密PHP,如下所示:
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
$decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, "Secret Passphrase", base64_decode($password), MCRYPT_MODE_CBC, $iv);
Run Code Online (Sandbox Code Playgroud)
它根本不起作用,解密的密码字符串看起来很奇怪:
string(64) ">?OX2MS???v?<$????i????_??P???\??=?_6(?m????,4WT7??a"
Run Code Online (Sandbox Code Playgroud)
以下是有用评论之后我的JavaScript代码的当前状态:
var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase");
var ivHex = encryptedPassword.iv.toString();
var ivSize = encryptedPassword.algorithm.ivSize; // same as blockSize
var keySize = encryptedPassword.algorithm.keySize;
var keyHex = encryptedPassword.key.toString();
var saltHex = encryptedPassword.salt.toString(); // must be sent
var openSslFormattedCipherTextString = encryptedPassword.toString(); // not used
var cipherTextHex = encryptedPassword.ciphertext.toString(); // must be sent
Run Code Online (Sandbox Code Playgroud)
我将saltHex和CipherTextHex发送到PHP服务器,我正在使用mcrypt_decrypt(),如下所示:
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), $saltHex); …Run Code Online (Sandbox Code Playgroud) 我有来自CryptoJS的加密AES-256字符串和密码短语.我需要用Java解密它,但无法弄清楚如何做到这一点.您似乎需要IV,密钥和盐来解密,并且在CryptoJS主页中,加密数据已经包含所有这些,并且CryptoJS可以某种方式将它们从加密输入中解析出来.
谁知道怎么做?我已经看到了很多关于CryptoJS的例子 - Java加密/解密但是大多数都使用硬编码的IV /密钥,或者只是将密码/密钥从cryptoJS端发送到Java端.我所拥有的只是一个密码,就像这个网站所做的那样!
cryptojs ×4
aes ×3
encryption ×3
java ×3
javascript ×2
byte ×1
cryptography ×1
dump ×1
hex ×1
mcrypt ×1
php ×1
pycrypto ×1
python ×1