我正在使用openssl_encrypt
加密某些数字,例如:
<?php
$input = 123;
$binary = decbin($input);
echo $binary; // outputs: 1111011
$cipher = 'aes-128-ecb';
$key = openssl_random_pseudo_bytes(32);
$encodedRaw = openssl_encrypt($binary, $cipher, $key, true);
echo $encodedRaw; // outputs: D�f�e↓v�ne��|۵�
现在,由于所有内容都是数字,而encodedRaw只是一些二进制流(转换为一些奇怪的随机类似字符),我试图将其转换回二进制(01
)格式。
$binary2 = bindec($encodedRaw);
echo $binary2; // outputs: 0
似乎bindec()失败并返回false,这被PHP神奇地转换为0
。为了确认这一点,我做了一个包含20个随机$输入的循环,并且它们在最后一步都返回了0
。
openssl_encrypt
输出转换为二进制字符串(由0&#39; s和1&#39;组成)?答案 0 :(得分:2)
FragmentActivity activity;
int imageArray[];
public EndLessAdapter(FragmentActivity act, int[] imgArra) {
imageArray = imgArra;
activity = act;
}
public int getCount() {
return Integer.MAX_VALUE;
}
private int pos = 0;
public Object instantiateItem(View collection, int position) {
ImageView mwebView = new ImageView(activity);
((ViewPager) collection).addView(mwebView, 0);
mwebView.setScaleType(ScaleType.FIT_XY);
mwebView.setImageResource(imageArray[pos]);
if (pos >= imageArray.length - 1)
pos = 0;
else
++pos;
return mwebView;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View) arg1);
}
@Override
public Parcelable saveState() {
return null;
}
会返回一个&#39; 0&#39;和&#39; 1&#39; charcters。
decbin
反其道而行之。它需要一串&#39; 0&#39; 0和&#39; 1&#39; charcters。
它与bindec
返回的二进制数据无关。
如果您想以人类可读的形式打印openssl_encrypt
,可以使用unpack,例如返回十六进制字符串:
$encodedRaw
要打印类似于var_dump(unpack('h*', $encodedRaw));
输出的字符串,您可以执行以下操作:
bindec
答案 1 :(得分:0)
$hex = unpack('h*', $cipherText)[1]
将原始二进制文件转换为十六进制$cipherText = pack('h*', $hex)
将十六进制字符串转换为原始二进制文件虽然dexhex
和hexdec
执行小数&lt; - &gt;十六进制转换,在我的情况下,他们失败了,因为我正在努力工作。
因此我建议使用GMP扩展名:
$gmp = gmp_init($hex, 16);
hex到GMP,然后:$dec = gmp_strval($gmp, 10);
GMP编号基于10号码STRING表示$bin = gmp_strval($gmp, 2);
GMP编号基础2编号STRING表示