diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp
index e5d7fa4208f7da630aa5eac794921f018d0166ea..d54c38aee7550c85211597725119d7efb499ead8 100644
--- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp
@@ -137,43 +137,43 @@ std::string AudioSrtpSession::getBase64ConcatenatedKeys()
 {
 
     // concatenate master and salt
-    uint8 concatenated[30];
-    memcpy((void*)concatenated, (void*)_localMasterKey, 16);
-    memcpy((void*)(concatenated+16), (void*)_localMasterSalt, 14);
+    int concatLength = _localMasterKeyLength + _localMasterSaltLength;
+    uint8 concatKeys[concatLength];
+    memcpy((void*)concatKeys, (void*)_localMasterKey, _localMasterKeyLength);
+    memcpy((void*)(concatKeys + _localMasterKeyLength), (void*)_localMasterSalt, _localMasterSaltLength);
 
     // encode concatenated keys in base64
-    char *output = encodeBase64((unsigned char*)concatenated, 30);
+    char *output = encodeBase64((unsigned char*)concatKeys, concatLength);
 
     std::string keys(output);
 
+    printf("Base64ConcatenatedKeys : base64keys %s\n", keys.c_str());
+    printf("Base64ConcatenatedKeys : size %d\n", (int)keys.size());
+
     free(output);
 
     return keys;
 }
 
 
-  void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys)
+void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys)
 {
 
+  // base64keys.append("\0");
     printf("unBase64ConcatenatedKeys : base64keys %s\n", base64keys.c_str());
-    printf("unBase64ConcatenatedKeys : size %i\n", (int)base64keys.size());
-    char *output = decodeBase64((unsigned char*)base64keys.c_str(), base64keys.size());
-
-    uint8 concatenated[30];
-    memcpy((void*)concatenated, (void*)output, 30);
-
-     printf("Remote Master: ");
-     for(int i = 0; i < 16; i++) {
-       _remoteMasterKey[i] = concatenated[i];
-       printf("%i", concatenated[i]);
-     }
-     printf("\n");
-     printf("Remote Salt: ");
-     for(int i = 14; i < 30; i++) {
-       _remoteMasterSalt[i-14] = concatenated[i];
-       printf("%i", concatenated[i]);
-     }
-     printf("\n");
+    printf("unBase64ConcatenatedKeys : size %d\n", (int)base64keys.size());
+
+    int length;
+
+    char *dataptr = (char*)base64keys.data();
+
+    char *output = decodeBase64((unsigned char*)dataptr, strlen(dataptr), &length);
+
+    printf("Master and Salt: ");
+    for (int i = 0; i<length; i++) {
+        printf("%x ", output[i]);
+    }
+    printf("\n");
 
     free(output);
 }
@@ -246,14 +246,14 @@ char* AudioSrtpSession::encodeBase64(unsigned char *input, int length)
     BIO_get_mem_ptr(b64, &bptr);
 
     // copy result in output buffer (-1 since we do not want the EOF character)
-    strncpy(buffer, (char*)(bptr->data), bptr->length-1);
+    strncpy(buffer, (char*)(bptr->data), bptr->length);
 
     BIO_free_all(bmem);
 
     return buffer;    
 }
 
-char* AudioSrtpSession::decodeBase64(unsigned char *input, int length)
+char* AudioSrtpSession::decodeBase64(unsigned char *input, int length, int *length_out)
 {
     BIO *b64, *bmem;
 
@@ -262,12 +262,13 @@ char* AudioSrtpSession::decodeBase64(unsigned char *input, int length)
 
     // init decoder and read-only BIO buffer
     b64 = BIO_new(BIO_f_base64());
+    // BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
     bmem = BIO_new_mem_buf(input, length);
 
     // create encoder chain
-    bmem = BIO_push(bmem, b64);
+    bmem = BIO_push(b64, bmem);
 
-    BIO_read(bmem, buffer, length);
+    *length_out = BIO_read(bmem, buffer, length);
 
     BIO_free_all(bmem);
 
diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h
index 9055d07c31cd09d9c362da51946ad12e461f306b..6e90eb957335f3c485287fdb947b91fae818932e 100644
--- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h
@@ -64,7 +64,7 @@ namespace sfl {
 
 	    char* encodeBase64(unsigned char *input, int length);
 
-	    char* decodeBase64(unsigned char *input, int length);
+	    char* decodeBase64(unsigned char *input, int length, int *length_out);
 
             uint8 _localMasterKey[16];