1

This is the bash command echo -n x && (echo 618cf954-6576-491d-8ac6-a1b888c4705d |xxd -r -p |openssl base64|tr '/+' '_-')

This is my php

<?
$uuid = "618cf954-6576-491d-8ac6-a1b888c4705d";
$voiceid = "x" . $uuid;
$voiceid  = base64_encode($voiceid);
$voiceid = str_replace("+", "-", $voiceid);
$voiceid = str_replace("/", "_", $voiceid);
echo $voiceid;
?>

The bash gives the right output, the php one isn't. I'm not sure what i need to do deferent in php.

The output should be xYYz5VGV2SR2KxqG4iMRwXQ==

A C++ version is at https://gist.github.com/1e096b658097c19cf309

0

2 Answers 2

3

Also, in the Bash version, the "x" isn't included in the pipe through xxd and openssl. If you want it to be then do this:

{ echo -n x; echo -n 618cf954-6576-491d-8ac6-a1b888c4705d; } | xxd -r -p | openssl base64 | tr '/+' '_-')

If, on the other hand, you want the PHP to match the existing Bash:

<?
$uuid = "618cf954-6576-491d-8ac6-a1b888c4
$voiceid = str_replace("-", "", $uuid);
$voiceid = pack("H*", $voiceid);
$voiceid  = base64_encode($voiceid);
$voiceid = str_replace("+", "-", $voiceid);
$voiceid = str_replace("/", "_", $voiceid);
$voiceid = "x" . $voiceid;
echo $voiceid;
?>

You will need to use pack to convert the hex string to binary.

Edit: Fixed several of my errors.

Sign up to request clarification or add additional context in comments.

5 Comments

echo 618cf954 |xxd -r -p |hexdump -C shows that xxd discards the newline.
@Jander: I've revised my answer accordingly. Thanks.
Why did you put x at the end? Prepending the x prevents conflicts with the Vivox api.
@Keverw: See the first sentence in my answer. The "x" is in your Bash version is prepended without being processed by the pipeline. There is another problem with your PHP version and that is their is no step that corresponds to the xxd step. By the way, this is the first you've mentioned the context.
@Keverw: Please see my edited answer. Sorry for the confusion.
3

I think the following line is wrong:

$voiceid = "x" . $uuid;

Adding the "x" onto the string should be the last thing you do before the PHP echo.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.