diff --git a/VERSIONS_HOTLINE/87312 b/VERSIONS_HOTLINE/87312
new file mode 100644
index 0000000000000000000000000000000000000000..bd454c26f97350ae588a307ae930df9e6eeeaced
--- /dev/null
+++ b/VERSIONS_HOTLINE/87312
@@ -0,0 +1 @@
+ - ticket #87312 : sécurisation de l'accès à la plateforme LeKiosk
\ No newline at end of file
diff --git a/library/digital_resources/Lekiosk/Config.php b/library/digital_resources/Lekiosk/Config.php
index 27120451fef52f86cc553c45a77a7bf14a36567f..f7b40600424767d5a442d59bcab6b5f5e57cc774 100644
--- a/library/digital_resources/Lekiosk/Config.php
+++ b/library/digital_resources/Lekiosk/Config.php
@@ -36,16 +36,18 @@ class Lekiosk_Config extends Class_DigitalResource_Config {
             'MailUrl' => 'http://get.lekiosk.com/pro/?utm_source=LK&utm_campaign=B2B&utm_medium=footer',
 
             'AdminVars' => [
-                            'ID' => Class_AdminVar_Meta::newDefault($this->_('Identifiant fournit par LeKiosk'))->bePrivate(),
+                            'ID' => Class_AdminVar_Meta::newDefault($this->_('Identifiant fourni par LeKiosk'))->bePrivate(),
                             'SSO_MODE' => Class_AdminVar_Meta::newCombo($this->_('Type de SSO lekiosk.com'),
                                                                         ['options' => ['selectOptions' => ['label' => $this->_('Mode d\'authentification'),
                                                                                                            'multioptions' => ['' => 'Lien',
                                                                                                                               'CAS' => 'CAS']]]])->bePrivate(),
-                            'FTP_LOGIN' => Class_AdminVar_Meta::newDefault($this->_('Identifiant du compte FTP fournit par LeKiosk (déprécié)'))->bePrivate(),
-                            'FTP_PASSWORD' => Class_AdminVar_Meta::newDefault($this->_('Mot de passe du compte FTP fournit par LeKiosk (déprécié)'))->bePrivate(),
-                            'HTTP_LOGIN' => Class_AdminVar_Meta::newDefault($this->_('Identifiant du compte HTTP fournit par LeKiosk'))->bePrivate(),
-                            'HTTP_PASSWORD' => Class_AdminVar_Meta::newDefault($this->_('Mot de passe du compte HTTP fournit par LeKiosk'))->bePrivate(),
+                            'FTP_LOGIN' => Class_AdminVar_Meta::newDefault($this->_('Identifiant du compte FTP fourni par LeKiosk (déprécié)'))->bePrivate(),
+                            'FTP_PASSWORD' => Class_AdminVar_Meta::newDefault($this->_('Mot de passe du compte FTP fourni par LeKiosk (déprécié)'))->bePrivate(),
+                            'HTTP_LOGIN' => Class_AdminVar_Meta::newDefault($this->_('Identifiant du compte HTTP fourni par LeKiosk'))->bePrivate(),
+                            'HTTP_PASSWORD' => Class_AdminVar_Meta::newDefault($this->_('Mot de passe du compte HTTP fourni par LeKiosk'))->bePrivate(),
                             'HARVEST_URL' => Class_AdminVar_Meta::newDefault($this->_('URL de moissonage de la ressource LeKiosk'))->bePrivate(),
+                            'AES_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé de cryptage/AES des mails fourni par LeKiosk'))->bePrivate(),
+                            'SHA1_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé de cryptage/SHA1 des accès fourni par LeKiosk'))->bePrivate(),
             ],
 
             'SsoAction' => true,
diff --git a/library/digital_resources/Lekiosk/Link.php b/library/digital_resources/Lekiosk/Link.php
index 8fcce9be8612f432cc1a1bc15d9368b193ff8c74..9414b08008cd0f72e71a177f7c6ad31f37b81125 100644
--- a/library/digital_resources/Lekiosk/Link.php
+++ b/library/digital_resources/Lekiosk/Link.php
@@ -23,8 +23,6 @@
 class Lekiosk_Link extends Lekiosk_LinkAbstract {
   const ROOT_URL = 'https://pros.lekiosk.com';
   const BASE_URL = '/login/accesshash?';
-  const AES_KEY = '56FGH4sTOV9ZXr4Q';
-  const SHA1_KEY = '897RDZQo789';
 
   protected $_mail;
   protected $_base_url;
@@ -48,7 +46,7 @@ class Lekiosk_Link extends Lekiosk_LinkAbstract {
 
 
   protected function accessHash() {
-    return sha1($this->baseUrl() . static::SHA1_KEY);
+    return sha1($this->baseUrl() . Lekiosk_Config::getInstance()->getAdminVar('SHA1_KEY'));
   }
 
 
@@ -64,7 +62,11 @@ class Lekiosk_Link extends Lekiosk_LinkAbstract {
 
 
   protected function cryptedMail() {
-    return bin2hex(openssl_encrypt($this->_mail, 'aes-128-cbc', static::AES_KEY, true, static::AES_KEY));
+    return bin2hex(openssl_encrypt($this->_mail,
+                                   'aes-128-cbc',
+                                   Lekiosk_Config::getInstance()->getAdminVar('AES_KEY'),
+                                   true,
+                                   Lekiosk_Config::getInstance()->getAdminVar('AES_KEY')));
   }
 }
 ?>
\ No newline at end of file
diff --git a/library/digital_resources/Lekiosk/Service.php b/library/digital_resources/Lekiosk/Service.php
index 24f8fe8db23f96f2f1002c61f17085b84a153fd3..6411ddacd73382c464bdce812162ef1a54d14cc9 100644
--- a/library/digital_resources/Lekiosk/Service.php
+++ b/library/digital_resources/Lekiosk/Service.php
@@ -1,4 +1,3 @@
-
 <?php
 /**
  * Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved.
diff --git a/library/digital_resources/Lekiosk/tests/LekioskTest.php b/library/digital_resources/Lekiosk/tests/LekioskTest.php
index e0ddb360028fd3ebcaeef74150042705e4e364d7..7c727e0607e9232b821ab297d678c7017c60aa4b 100644
--- a/library/digital_resources/Lekiosk/tests/LekioskTest.php
+++ b/library/digital_resources/Lekiosk/tests/LekioskTest.php
@@ -15,7 +15,7 @@
  * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
  *
  * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
-* along with BOKEH; if not, write to the Free Software
+ * along with BOKEH; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
  */
 
@@ -23,9 +23,11 @@
 class LekioskAdminVars {
 
   public static function activate() {
-    Class_AdminVar::set('Lekiosk_ID', '29');
-    Class_AdminVar::set('Lekiosk_FTP_LOGIN', 'FOIX');
+    Class_AdminVar::set('Lekiosk_ID', '66');
+    Class_AdminVar::set('Lekiosk_FTP_LOGIN', 'POIS');
     Class_AdminVar::set('Lekiosk_FTP_PASSWORD', 'PWD');
+    Class_AdminVar::set('Lekiosk_AES_KEY', '12FA88sE3V5UKr3K');
+    Class_AdminVar::set('Lekiosk_SHA1_KEY', '976ABWQo231');
   }
 
 
@@ -33,6 +35,8 @@ class LekioskAdminVars {
     Class_AdminVar::set('Lekiosk_ID', '');
     Class_AdminVar::set('Lekiosk_FTP_LOGIN', '');
     Class_AdminVar::set('Lekiosk_FTP_PASSWORD', '');
+    Class_AdminVar::set('Lekiosk_AES_KEY', '');
+    Class_AdminVar::set('Lekiosk_SHA1_KEY', '');
   }
 }
 
@@ -61,7 +65,7 @@ abstract class LekioskLinkModeLinkTestCase extends ModelTestCase {
 class LekioskLinkModeLinkTest extends LekioskLinkModeLinkTestCase {
   /** @test */
   public function urlForMyemailAtLekioskDotComShouldContainsEncryptedEmail() {
-    $expected = 'https://pros.lekiosk.com/login/accesshash?email=1671f18f515f49271985280397c1c2bc48e1bfa31a3b638cb22e510e4953d65e&id=29&AccessHash=4eef094aacc80db2698f841214bba28f8b5d001a';
+    $expected = 'https://pros.lekiosk.com/login/accesshash?email=a9be7374efd20f652cc1206da2d721f58420bf24f5b6febd143643d402f0cf39&id=66&AccessHash=6750ec2389df54aff5ae952b7e03a521e3f2a5d5';
     $this->assertEquals(
                         $expected,
                         (new Lekiosk_Link('myemail@lekiosk.com'))->url()
@@ -71,7 +75,7 @@ class LekioskLinkModeLinkTest extends LekioskLinkModeLinkTestCase {
 
   /** @test */
   public function withoutMailShouldBeNotContainsEmailKey() {
-    $expected = 'https://pros.lekiosk.com/login/accesshash?email=18ca3d8ad40255ce09d5d20debc1e069&id=29&AccessHash=69436bc8e1ea7a85b3a7c9d2d764077e3519a6c5';
+    $expected = 'https://pros.lekiosk.com/login/accesshash?email=a0dc2568ae735ff737ffc8b9bf2e4fb8&id=66&AccessHash=92a485f29b5000e908fef0815c00487b1aa759a1';
     $this->assertEquals($expected, (new Lekiosk_Link(''))->url());
   }
 
@@ -79,7 +83,7 @@ class LekioskLinkModeLinkTest extends LekioskLinkModeLinkTestCase {
   /** @test */
   public function withEmptyUserMailShouldGetSiteOrProfileMail() {
     Class_Profil::find(1)->setMailSite('toto@example.com');
-    $expected = 'https://pros.lekiosk.com/login/accesshash?email=76903fe54055ab757db99c2370d89970e25c5b33b5a69cafc108c0031685af88&id=29&AccessHash=5db96ac3eb21187f2a7622ebbfa255321c7f32c1';
+    $expected = 'https://pros.lekiosk.com/login/accesshash?email=bd612092eb8f12afc609f161d641ba9a4ac6b6e45bfae616f4994f9205f50a7d&id=66&AccessHash=4c09021c872852de07b4e5e89a9fc1659a3c293c';
     $this->assertEquals($expected, (new Lekiosk_Link(''))->url());
   }
 }
@@ -104,7 +108,7 @@ class LekioskLinkModeSSOTest extends LekioskLinkModeLinkTestCase {
   public function linkShouldBeCasUrlWithLekioskId() {
     $url = 'https://apipros.lekiosk.com/login/cas?'
       .'cas_fournisseur=' . urlencode(Class_Url::rootUrl() . BASE_URL . '/cas-server-v10')
-      .'&id=29'
+      .'&id=66'
       .'&returnUrl=';
 
     $this->assertEquals($url,
@@ -259,7 +263,7 @@ abstract class LekioskServiceTestCase extends AbstractControllerTestCase {
 
     $file_system = $this->mock()
                         ->whenCalled('file_get_contents')
-                        ->with('ftp://FOIX:PWD@ftp.lekiosk.com/lekiosque_06022017.xml')
+                        ->with('ftp://POIS:PWD@ftp.lekiosk.com/lekiosque_06022017.xml')
                         ->answers($catalogue_xml);
 
     $http_client = $this->mock()
@@ -423,7 +427,7 @@ class LekioskRenderAlbumFromRecordTest extends LekioskServiceTestCase {
     $this->_dispatchAlbum();
     $url = 'https://apipros.lekiosk.com/login/cas?'
       .'cas_fournisseur=' . urlencode(Class_Url::absolute('/cas-server-v10'))
-      .'&id=29'
+      .'&id=66'
       .'&returnUrl=Le-10-Sport-National-z1962566.aspx';
 
     $this->assertXPath('//a[@href="' . $url . '"]', $this->_response->getBody());
@@ -435,9 +439,9 @@ class LekioskRenderAlbumFromRecordTest extends LekioskServiceTestCase {
     Class_AdminVar::set('Lekiosk_SSO_MODE', '');
     $this->_dispatchAlbum();
     $url = 'https://pros.lekiosk.com/login/accesshash?'
-      . 'email=18ca3d8ad40255ce09d5d20debc1e069'
-      . '&id=29'
-      . '&AccessHash=69436bc8e1ea7a85b3a7c9d2d764077e3519a6c5'
+      . 'email=a0dc2568ae735ff737ffc8b9bf2e4fb8'
+      . '&id=66'
+      . '&AccessHash=92a485f29b5000e908fef0815c00487b1aa759a1'
       . '&ReturnUrl=Le-10-Sport-National-z1962566.aspx';
     $this->assertXPath('//a[@href="' . $url . '"]', $this->_response->getBody());
   }
@@ -547,10 +551,12 @@ abstract class LekioskServiceHttpHarvestingTestCase extends AbstractControllerTe
   public function setUp() {
     parent::setUp();
 
-    Class_AdminVar::set('Lekiosk_ID', '29');
-    Class_AdminVar::set('Lekiosk_HTTP_LOGIN', 'FOIX');
+    Class_AdminVar::set('Lekiosk_ID', '66');
+    Class_AdminVar::set('Lekiosk_HTTP_LOGIN', 'POIS');
     Class_AdminVar::set('Lekiosk_HTTP_PASSWORD', 'PWD');
     Class_AdminVar::set('Lekiosk_HARVEST_URL', 'https://apipros.lekiosk.com');
+    Class_AdminVar::set('Lekiosk_AES_KEY', '12FA88sE3V5UKr3K');
+    Class_AdminVar::set('Lekiosk_SHA1_KEY', '976ABWQo231');
 
     $token_json = file_get_contents(__DIR__. '/token.json');
     $catalogue_xml = file_get_contents(__DIR__. '/catalogue_from_http.xml');
@@ -558,7 +564,7 @@ abstract class LekioskServiceHttpHarvestingTestCase extends AbstractControllerTe
     $http_client = $this->mock()
                         ->whenCalled('postRawData')
                         ->with('https://apipros.lekiosk.com/login',
-                               '{"username":"FOIX","userpwd":"PWD"}','application/json')
+                               '{"username":"POIS","userpwd":"PWD"}','application/json')
                         ->answers($token_json)
 
                         ->whenCalled('open_url')
@@ -592,7 +598,7 @@ class LekioskServiceHttpUpdateHarvestingTest extends LekioskServiceHttpHarvestin
     $http_client = $this->mock()
                         ->whenCalled('postRawData')
                         ->with('https://apipros.lekiosk.com/login',
-                               '{"username":"FOIX","userpwd":"PWD"}','application/json')
+                               '{"username":"POIS","userpwd":"PWD"}','application/json')
                         ->answers($token_json)
 
                         ->whenCalled('open_url')
@@ -698,7 +704,7 @@ class LekioskServiceHttpHarvestingNoticeAjaxTest extends LekioskServiceHttpHarve
     $this->_dispatchAlbum();
     $url = 'https://apipros.lekiosk.com/login/cas?'
       .'cas_fournisseur=' . urlencode(Class_Url::absolute('/cas-server-v10'))
-      .'&id=29'
+      .'&id=66'
       .'&returnUrl='. urlencode('/fr/pageproduct/851749/2052615');
 
     $this->assertXPath('//a[@href="' . $url . '"]', $this->_response->getBody());
@@ -710,9 +716,9 @@ class LekioskServiceHttpHarvestingNoticeAjaxTest extends LekioskServiceHttpHarve
     Class_AdminVar::set('Lekiosk_SSO_MODE', '');
     $this->_dispatchAlbum();
     $url = 'https://pros.lekiosk.com/login/accesshash?'
-      . 'email=18ca3d8ad40255ce09d5d20debc1e069'
-      . '&id=29'
-      . '&AccessHash=69436bc8e1ea7a85b3a7c9d2d764077e3519a6c5'
+      . 'email=a0dc2568ae735ff737ffc8b9bf2e4fb8'
+      . '&id=66'
+      . '&AccessHash=92a485f29b5000e908fef0815c00487b1aa759a1'
       . '&ReturnUrl='.urlencode('/fr/pageproduct/851749/2052615');
     $this->assertXPath('//a[@href="' . $url . '"]', $this->_response->getBody());
   }
@@ -728,11 +734,13 @@ class LekioskPluginTest extends Admin_AbstractControllerTestCase {
 
   public function setUp() {
     parent::setUp();
-    Class_AdminVar::set('Lekiosk_ID', '29');
+    Class_AdminVar::set('Lekiosk_ID', '66');
 
     Class_AdminVar::set('Lekiosk_HARVEST_URL', 'http://lekiosk.org/oai');
     Class_AdminVar::set('Lekiosk_HTTP_LOGIN', 'lekiosk');
     Class_AdminVar::set('Lekiosk_HTTP_PASSWORD', 'PWD+456');
+    Class_AdminVar::set('Lekiosk_AES_KEY', '12FA88sE3V5UKr3K');
+    Class_AdminVar::set('Lekiosk_SHA1_KEY', '976ABWQo231');
 
     $group = $this->fixture('Class_UserGroup',
                             ['id' => 1,
diff --git a/library/digital_resources/Skilleos/Link.php b/library/digital_resources/Skilleos/Link.php
deleted file mode 100644
index efa2b2cd3106245e9619e150314759a2480f2ec3..0000000000000000000000000000000000000000
--- a/library/digital_resources/Skilleos/Link.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved.
- *
- * BOKEH is free software; you can redistribute it and/or modify
- * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
- * the Free Software Foundation.
- *
- * There are special exceptions to the terms and conditions of the AGPL as it
- * is applied to this software (see README file).
- *
- * BOKEH is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
- * along with BOKEH; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
- */
-
-
-class Skilleos_Link extends Skilleos_LinkAbstract {
-  const ROOT_URL = 'http://skilleos.com/sigb/sso/';
-
-  protected $_mail;
-  protected $_base_url;
-
-
-  public function __construct($mail) {
-    $this->_mail = ($mail) ? $mail : Class_Profil::getPortail()->getMailSiteOrPortail();
-  }
-
-
-  public function url($album = null) {
-    $url = static::ROOT_URL
-      . $this->baseUrl()
-      . '&AccessHash=' . $this->accessHash();
-
-    if (!$album)
-      return $url;
-
-    return $url . '&ReturnUrl=' . $this->_getReturnURL($album);
-  }
-
-
-  protected function accessHash() {
-    return sha1($this->baseUrl() . static::SHA1_KEY);
-  }
-
-
-  protected function baseUrl() {
-    if (null === $this->_base_url)
-      $this->_base_url = static::BASE_URL
-        . 'id_resource=' . $this->cryptedMail()
-        . '&id=' . Skilleos_Config::getInstance()->getAdminVar('ID')
-        ;
-
-    return $this->_base_url;
-  }
-
-
-  protected function cryptedMail() {
-    return bin2hex(openssl_encrypt($this->_mail, 'aes-128-cbc', static::AES_KEY, true, static::AES_KEY));
-  }
-}
-?>
\ No newline at end of file