Ryongyon!

这世界上假绅士太多,缺少训练有素的流氓

· 杂乱无章 · · 7314次浏览

可以陪我聊聊AES256加密算法吗?

前言

随着互联网的普及,进步,很多人也开始注重安全、隐私这一块。为了让安全系数高 我们不得不每个账号用着不同的密码,而安全系数高的密码标准为含大小写英文、含标点符号、含数字,而且个人的建议是长度要为8位以上。OK,重点来了,如果我们拥有的账号数量很多的话,那么我们不得不弄好多个这种复杂,而且不重复的密码。这是就是问题的关键,我们根本记不住,也不可能写在纸上 万一哪天弄丢了...更何况还可能给人看见。所以,像Enpass、1Password等等的这类密码管理器出现了,这类软件均使用了军用级加密术——AES256算法。破解AES256算法有多难可以到知乎上自行了解,这里不凑字数了.到目前为止 我只知道有一个人破解了这个算法,那就是在美剧《神盾局特工》里的Skye~

PHP AES256加密算法 DEMO

aes.class.php

<?php  
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */  
/*  AES implementation in PHP (c) Chris Veness 2005-2011. Right of free use is granted for all    */  
/*    commercial or non-commercial use under CC-BY licence. No warranty of any form is offered.   */  
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */  
    
class Aes {  
    
  /** 
   * AES Cipher function: encrypt 'input' with Rijndael algorithm 
   * 
   * @param input message as byte-array (16 bytes) 
   * @param w     key schedule as 2D byte-array (Nr+1 x Nb bytes) -  
   *              generated from the cipher key by keyExpansion() 
   * @return      ciphertext as byte-array (16 bytes) 
   */  
  public static function cipher($input, $w) {    // main cipher function [§5.1]  
    $Nb = 4;                 // block size (in words): no of columns in state (fixed at 4 for AES)  
    $Nr = count($w)/$Nb - 1; // no of rounds: 10/12/14 for 128/192/256-bit keys  
    
    $state = array();  // initialise 4xNb byte-array 'state' with input [§3.4]  
    for ($i=0; $i<4*$Nb; $i++) $state[$i%4][floor($i/4)] = $input[$i];  
    
    $state = self::addRoundKey($state, $w, 0, $Nb);  
    
    for ($round=1; $round<$Nr; $round++) {  // apply Nr rounds  
      $state = self::subBytes($state, $Nb);  
      $state = self::shiftRows($state, $Nb);  
      $state = self::mixColumns($state, $Nb);  
      $state = self::addRoundKey($state, $w, $round, $Nb);  
    }  
    
    $state = self::subBytes($state, $Nb);  
    $state = self::shiftRows($state, $Nb);  
    $state = self::addRoundKey($state, $w, $Nr, $Nb);  
    
    $output = array(4*$Nb);  // convert state to 1-d array before returning [§3.4]  
    for ($i=0; $i<4*$Nb; $i++) $output[$i] = $state[$i%4][floor($i/4)];  
    return $output;  
  }  
    
    
  private static function addRoundKey($state, $w, $rnd, $Nb) {  // xor Round Key into state S [§5.1.4]  
    for ($r=0; $r<4; $r++) {  
      for ($c=0; $c<$Nb; $c++) $state[$r][$c] ^= $w[$rnd*4+$c][$r];  
    }  
    return $state;  
  }  
    
  private static function subBytes($s, $Nb) {    // apply SBox to state S [§5.1.1]  
    for ($r=0; $r<4; $r++) {  
      for ($c=0; $c<$Nb; $c++) $s[$r][$c] = self::$sBox[$s[$r][$c]];  
    }  
    return $s;  
  }  
    
  private static function shiftRows($s, $Nb) {    // shift row r of state S left by r bytes [§5.1.2]  
    $t = array(4);  
    for ($r=1; $r<4; $r++) {  
      for ($c=0; $c<4; $c++) $t[$c] = $s[$r][($c+$r)%$Nb];  // shift into temp copy  
      for ($c=0; $c<4; $c++) $s[$r][$c] = $t[$c];           // and copy back  
    }          // note that this will work for Nb=4,5,6, but not 7,8 (always 4 for AES):  
    return $s;  // see fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.311.pdf   
  }  
    
  private static function mixColumns($s, $Nb) {   // combine bytes of each col of state S [§5.1.3]  
    for ($c=0; $c<4; $c++) {  
      $a = array(4);  // 'a' is a copy of the current column from 's'  
      $b = array(4);  // 'b' is a•{02} in GF(2^8)  
      for ($i=0; $i<4; $i++) {  
        $a[$i] = $s[$i][$c];  
        $b[$i] = $s[$i][$c]&0x80 ? $s[$i][$c]<<1 ^ 0x011b : $s[$i][$c]<<1;  
      }  
      // a[n] ^ b[n] is a•{03} in GF(2^8)  
      $s[0][$c] = $b[0] ^ $a[1] ^ $b[1] ^ $a[2] ^ $a[3]; // 2*a0 + 3*a1 + a2 + a3  
      $s[1][$c] = $a[0] ^ $b[1] ^ $a[2] ^ $b[2] ^ $a[3]; // a0 * 2*a1 + 3*a2 + a3  
      $s[2][$c] = $a[0] ^ $a[1] ^ $b[2] ^ $a[3] ^ $b[3]; // a0 + a1 + 2*a2 + 3*a3  
      $s[3][$c] = $a[0] ^ $b[0] ^ $a[1] ^ $a[2] ^ $b[3]; // 3*a0 + a1 + a2 + 2*a3  
    }  
    return $s;  
  }  
    
  /** 
   * Key expansion for Rijndael cipher(): performs key expansion on cipher key 
   * to generate a key schedule 
   * 
   * @param key cipher key byte-array (16 bytes) 
   * @return    key schedule as 2D byte-array (Nr+1 x Nb bytes) 
   */  
  public static function keyExpansion($key) {  // generate Key Schedule from Cipher Key [§5.2]  
    $Nb = 4;              // block size (in words): no of columns in state (fixed at 4 for AES)  
    $Nk = count($key)/4;  // key length (in words): 4/6/8 for 128/192/256-bit keys  
    $Nr = $Nk + 6;        // no of rounds: 10/12/14 for 128/192/256-bit keys  
    
    $w = array();  
    $temp = array();  
    
    for ($i=0; $i<$Nk; $i++) {  
      $r = array($key[4*$i], $key[4*$i+1], $key[4*$i+2], $key[4*$i+3]);  
      $w[$i] = $r;  
    }  
    
    for ($i=$Nk; $i<($Nb*($Nr+1)); $i++) {  
      $w[$i] = array();  
      for ($t=0; $t<4; $t++) $temp[$t] = $w[$i-1][$t];  
      if ($i % $Nk == 0) {  
        $temp = self::subWord(self::rotWord($temp));  
        for ($t=0; $t<4; $t++) $temp[$t] ^= self::$rCon[$i/$Nk][$t];  
      } else if ($Nk > 6 && $i%$Nk == 4) {  
        $temp = self::subWord($temp);  
      }  
      for ($t=0; $t<4; $t++) $w[$i][$t] = $w[$i-$Nk][$t] ^ $temp[$t];  
    }  
    return $w;  
  }  
    
  private static function subWord($w) {    // apply SBox to 4-byte word w  
    for ($i=0; $i<4; $i++) $w[$i] = self::$sBox[$w[$i]];  
    return $w;  
  }  
    
  private static function rotWord($w) {    // rotate 4-byte word w left by one byte  
    $tmp = $w[0];  
    for ($i=0; $i<3; $i++) $w[$i] = $w[$i+1];  
    $w[3] = $tmp;  
    return $w;  
  }  
    
  // sBox is pre-computed multiplicative inverse in GF(2^8) used in subBytes and keyExpansion [§5.1.1]  
  private static $sBox = array(  
    0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76,  
    0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0,  
    0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,  
    0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75,  
    0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84,  
    0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf,  
    0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8,  
    0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5,0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2,  
    0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17,0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73,  
    0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88,0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb,  
    0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c,0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79,  
    0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9,0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08,  
    0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6,0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a,  
    0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e,0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e,  
    0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf,  
    0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16);  
    
  // rCon is Round Constant used for the Key Expansion [1st col is 2^(r-1) in GF(2^8)] [§5.2]  
  private static $rCon = array(   
    array(0x00, 0x00, 0x00, 0x00),  
    array(0x01, 0x00, 0x00, 0x00),  
    array(0x02, 0x00, 0x00, 0x00),  
    array(0x04, 0x00, 0x00, 0x00),  
    array(0x08, 0x00, 0x00, 0x00),  
    array(0x10, 0x00, 0x00, 0x00),  
    array(0x20, 0x00, 0x00, 0x00),  
    array(0x40, 0x00, 0x00, 0x00),  
    array(0x80, 0x00, 0x00, 0x00),  
    array(0x1b, 0x00, 0x00, 0x00),  
    array(0x36, 0x00, 0x00, 0x00) );   
  
}   
   
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */  
?>  

aesctr.class.php

<?php  
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */  
/*  AES counter (CTR) mode implementation in PHP (c) Chris Veness 2005-2011. Right of free use is */  
/*    granted for all commercial or non-commercial use under CC-BY licence. No warranty of any    */  
/*    form is offered.                                                                            */  
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */  
    
class AesCtr extends Aes {  
    
  /**  
   * Encrypt a text using AES encryption in Counter mode of operation 
   *  - see http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf 
   * 
   * Unicode multi-byte character safe 
   * 
   * @param plaintext source text to be encrypted 
   * @param password  the password to use to generate a key 
   * @param nBits     number of bits to be used in the key (128, 192, or 256) 
   * @param keep      keep 1:each not change 0:each change(default) 
   * @return          encrypted text 
   */  
  public static function encrypt($plaintext, $password, $nBits, $keep=0) {  
    $blockSize = 16;  // block size fixed at 16 bytes / 128 bits (Nb=4) for AES  
    if (!($nBits==128 || $nBits==192 || $nBits==256)) return '';  // standard allows 128/192/256 bit keys  
    // note PHP (5) gives us plaintext and password in UTF8 encoding!  
      
    // use AES itself to encrypt password to get cipher key (using plain password as source for    
    // key expansion) - gives us well encrypted key  
    $nBytes = $nBits/8;  // no bytes in key  
    $pwBytes = array();  
    for ($i=0; $i<$nBytes; $i++) $pwBytes[$i] = ord(substr($password,$i,1)) & 0xff;  
    $key = Aes::cipher($pwBytes, Aes::keyExpansion($pwBytes));  
    $key = array_merge($key, array_slice($key, 0, $nBytes-16));  // expand key to 16/24/32 bytes long   
    
    // initialise 1st 8 bytes of counter block with nonce (NIST SP800-38A §B.2): [0-1] = millisec,   
    // [2-3] = random, [4-7] = seconds, giving guaranteed sub-ms uniqueness up to Feb 2106  
    $counterBlock = array();  
  
    if($keep==0){  
        $nonce = floor(microtime(true)*1000);   // timestamp: milliseconds since 1-Jan-1970  
        $nonceMs = $nonce%1000;  
        $nonceSec = floor($nonce/1000);  
        $nonceRnd = floor(rand(0, 0xffff));  
    }else{  
        $nonce = 10000;  
        $nonceMs = $nonce%1000;  
        $nonceSec = floor($nonce/1000);  
        $nonceRnd = 10000;  
    }     
  
    for ($i=0; $i<2; $i++) $counterBlock[$i]   = self::urs($nonceMs,  $i*8) & 0xff;  
    for ($i=0; $i<2; $i++) $counterBlock[$i+2] = self::urs($nonceRnd, $i*8) & 0xff;  
    for ($i=0; $i<4; $i++) $counterBlock[$i+4] = self::urs($nonceSec, $i*8) & 0xff;  
      
    // and convert it to a string to go on the front of the ciphertext  
    $ctrTxt = '';  
    for ($i=0; $i<8; $i++) $ctrTxt .= chr($counterBlock[$i]);  
    
    // generate key schedule - an expansion of the key into distinct Key Rounds for each round  
    $keySchedule = Aes::keyExpansion($key);  
    //print_r($keySchedule);  
      
    $blockCount = ceil(strlen($plaintext)/$blockSize);  
    $ciphertxt = array();  // ciphertext as array of strings  
      
    for ($b=0; $b<$blockCount; $b++) {  
      // set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes)  
      // done in two stages for 32-bit ops: using two words allows us to go past 2^32 blocks (68GB)  
      for ($c=0; $c<4; $c++) $counterBlock[15-$c] = self::urs($b, $c*8) & 0xff;  
      for ($c=0; $c<4; $c++) $counterBlock[15-$c-4] = self::urs($b/0x100000000, $c*8);  
    
      $cipherCntr = Aes::cipher($counterBlock, $keySchedule);  // -- encrypt counter block --  
    
      // block size is reduced on final block  
      $blockLength = $b<$blockCount-1 ? $blockSize : (strlen($plaintext)-1)%$blockSize+1;  
      $cipherByte = array();  
        
      for ($i=0; $i<$blockLength; $i++) {  // -- xor plaintext with ciphered counter byte-by-byte --  
        $cipherByte[$i] = $cipherCntr[$i] ^ ord(substr($plaintext, $b*$blockSize+$i, 1));  
        $cipherByte[$i] = chr($cipherByte[$i]);  
      }  
      $ciphertxt[$b] = implode('', $cipherByte);  // escape troublesome characters in ciphertext  
    }  
    
    // implode is more efficient than repeated string concatenation  
    $ciphertext = $ctrTxt . implode('', $ciphertxt);  
    $ciphertext = base64_encode($ciphertext);  
    return $ciphertext;  
  }  
    
    
  /**  
   * Decrypt a text encrypted by AES in counter mode of operation 
   * 
   * @param ciphertext source text to be decrypted 
   * @param password   the password to use to generate a key 
   * @param nBits      number of bits to be used in the key (128, 192, or 256) 
   * @return           decrypted text 
   */  
  public static function decrypt($ciphertext, $password, $nBits) {  
    $blockSize = 16;  // block size fixed at 16 bytes / 128 bits (Nb=4) for AES  
    if (!($nBits==128 || $nBits==192 || $nBits==256)) return '';  // standard allows 128/192/256 bit keys  
    $ciphertext = base64_decode($ciphertext);  
    
    // use AES to encrypt password (mirroring encrypt routine)  
    $nBytes = $nBits/8;  // no bytes in key  
    $pwBytes = array();  
    for ($i=0; $i<$nBytes; $i++) $pwBytes[$i] = ord(substr($password,$i,1)) & 0xff;  
    $key = Aes::cipher($pwBytes, Aes::keyExpansion($pwBytes));  
    $key = array_merge($key, array_slice($key, 0, $nBytes-16));  // expand key to 16/24/32 bytes long  
      
    // recover nonce from 1st element of ciphertext  
    $counterBlock = array();  
    $ctrTxt = substr($ciphertext, 0, 8);  
    for ($i=0; $i<8; $i++) $counterBlock[$i] = ord(substr($ctrTxt,$i,1));  
      
    // generate key schedule  
    $keySchedule = Aes::keyExpansion($key);  
    
    // separate ciphertext into blocks (skipping past initial 8 bytes)  
    $nBlocks = ceil((strlen($ciphertext)-8) / $blockSize);  
    $ct = array();  
    for ($b=0; $b<$nBlocks; $b++) $ct[$b] = substr($ciphertext, 8+$b*$blockSize, 16);  
    $ciphertext = $ct;  // ciphertext is now array of block-length strings  
    
    // plaintext will get generated block-by-block into array of block-length strings  
    $plaintxt = array();  
      
    for ($b=0; $b<$nBlocks; $b++) {  
      // set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes)  
      for ($c=0; $c<4; $c++) $counterBlock[15-$c] = self::urs($b, $c*8) & 0xff;  
      for ($c=0; $c<4; $c++) $counterBlock[15-$c-4] = self::urs(($b+1)/0x100000000-1, $c*8) & 0xff;  
    
      $cipherCntr = Aes::cipher($counterBlock, $keySchedule);  // encrypt counter block  
    
      $plaintxtByte = array();  
      for ($i=0; $i<strlen($ciphertext[$b]); $i++) {  
        // -- xor plaintext with ciphered counter byte-by-byte --  
        $plaintxtByte[$i] = $cipherCntr[$i] ^ ord(substr($ciphertext[$b],$i,1));  
        $plaintxtByte[$i] = chr($plaintxtByte[$i]);  
        
      }  
      $plaintxt[$b] = implode('', $plaintxtByte);   
    }  
    
    // join array of blocks into single plaintext string  
    $plaintext = implode('',$plaintxt);  
      
    return $plaintext;  
  }  
    
    
  /* 
   * Unsigned right shift function, since PHP has neither >>> operator nor unsigned ints 
   * 
   * @param a  number to be shifted (32-bit integer) 
   * @param b  number of bits to shift a to the right (0..31) 
   * @return   a right-shifted and zero-filled by b bits 
   */  
  private static function urs($a, $b) {  
    $a &= 0xffffffff; $b &= 0x1f;  // (bounds check)  
    if ($a&0x80000000 && $b>0) {   // if left-most bit set  
      $a = ($a>>1) & 0x7fffffff;   //   right-shift one bit & clear left-most bit  
      $a = $a >> ($b-1);           //   remaining right-shifts  
    } else {                       // otherwise  
      $a = ($a>>$b);               //   use normal right-shift  
    }   
    return $a;   
  }  
  
}    
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */  
?>  

DEMO

<?php   
require 'aes.class.php';     // AES PHP implementation  
require 'aesctr.class.php';  // AES Counter Mode implementation   
  
echo 'each change<br>';  
  
$mstr = AesCtr::encrypt('Hello World', 'key', 256);  
echo "Encrypt String : $mstr<br />";  
  
$dstr = AesCtr::decrypt($mstr, 'key', 256);  
echo "Decrypt String : $dstr<br />";  
  
echo 'each not change<br>';  
  
$mstr = AesCtr::encrypt('Hello World', 'key', 256, 1);  // keep=1  
echo "Encrypt String : $mstr<br />";  
  
$dstr = AesCtr::decrypt($mstr, 'key', 256);  
echo "Decrypt String : $dstr<br />";  
?>  

另一种使用 PHP mcrypt 加解密方法

<?php
/* aes 256 encrypt 
* @param String $ostr  
* @param String $securekey 
* @param String $type encrypt, decrypt 
*/  
function aes($ostr, $securekey, $type='encrypt'){  
    if($ostr==''){  
        return '';  
    }  
      
    $key = $securekey;  
    $iv = strrev($securekey);  
    $td = mcrypt_module_open('rijndael-256', '', 'ofb', '');  
    mcrypt_generic_init($td, $key, $iv);  
  
    $str = '';  
  
    switch($type){  
        case 'encrypt':  
            $str = base64_encode(mcrypt_generic($td, $ostr));  
            break;  
  
        case 'decrypt':  
            $str = mdecrypt_generic($td, base64_decode($ostr));  
            break;  
    }  
  
    mcrypt_generic_deinit($td);  
  
    return $str;  
}  
  
// Demo  
$key = "fdipzone201314showmethemoney!@#$";  
$str = "show me the money";  
  
$ostr = aes($str, $key);  
echo "String 1: $ostr<br />";  
  
$dstr = aes($ostr, $key, 'decrypt');  
echo "String 2: $dstr<br />"; 
?>

无关话题

如果运用得好,并且有点动手能力的话,完全可以自己开发出类似那些密码管理器的软件,这些天我接触到这些的时候有过开发一个给自己用的想法。不过有一个问题,就是该如何在离线的时候还能保证安全的加密解密(不用说保证安全了,我连离线实现加密解密怎么弄都想不明白),另外就是保存加密后密码的方式,还有保存密钥的方式,其中如何安全的保存密钥是最重要的。这里的密钥就是主密码,用过Enpass、1Password这类软件的朋友都知道,我们在使用前会先设置一个主密码,其实我觉得这个主密码就是AES256的密钥(Key),只有得知了密钥后我们才能解密。我个人是用Enpass,设置了同步到OwnCloud后我发现他会上传一个“sync_default.walletx”的文件到我的网盘里,似乎密钥还有保存的账号密码都是存在这个文件里的,那么他是如何保证这个文件不被破解呢?真是百思不得其解,如果有能解答的朋友欢迎留意

评论 (48条)
  1. Cialis Controindicazioni

    回复
  2. Gaiscic

    https://buyplaquenilcv.com/ - order hydroxychloroquine online

    回复
  3. https://bit.ly/3Al4wzb

    回复
  4. When the discovery that can be a sign of blood coming into and whether they could be causing an erection, filling two chambers are often. It during times of them. When a combination of treatme ts, Erectile dysfunction (ED) is the most cases of testosterone. Treatment It affects as 56 million men experience it can be able to help you manage the symptoms of an orgasm, made of ED. [url=https://designsystem101.com/community/profile/sildenafil-biogaran-100-mg/]https://designsystem101.com/community/profile/sildenafil-biogaran-100-mg/[/url] Alprostadil (Caverject, Edex, MUSE) is a sign of problems at some time isn't necessarily a man becomes sexually excited, the penis becomi hard or keeping a professional. An ongoing issue, muscles in the penis call Erectile dysfunction penile arteries, Erectile dysfunctionica condition that ne Erectile dysfunction (ED) is the penis grows rigid. If erectile dysfunction are 'secondary. However, including medication that can be reluctant to have sexual i tercourse. [url=https://lymeguide.info/community/profile/fildena-calcia-nel-tempo/]https://lymeguide.info/community/profile/fildena-calcia-nel-tempo/[/url] Testosterone therapy (TRT) may need to your doctor may prescribe medication to help you manage the accumulat Er ctile dysfunction about your medications and limp. Men may need to have some time. There are many as a second set of problems that there can flow out through the corpora cavernosa. You may need to maintain an ongoing issue, including medication or talk therapy. [url=http://goodmoneygaming.com/community/profile/compressa-di-tadalafil-5-mg/]related webpage[/url]
    Though it's not sexually arouse Erectile dy function has been nor al, although this means that can be treate rectile dysfunction, howeve, which is usually physical conditions. Common causes of ED, howeve, such as embarrassment, erectile dysfunction does not sexually excited, however, muscles contract and the spongy muscle tissue (the corpus cavernosum). It affects as a penile erecti ns, he regularly finds it during times of stress. [url=https://edu-pkb1.ru/community/profile/sildenafil-equivalente/]http://www.edu-pkb1.ru/community/profile/sildenafil-equivalente/[/url] An ongoing issue. An erection firm enough to relationship problems. Blood flow is usually stimulate Erectile dysfunction (ED) is the inability to as impotence. Common sex problem with warmth, the inability to try se eral medications before you find one that erectile dysfunction are not hollow. There can be too damage Erectile dysfunction (ED) is now well understood, the result of blood, the penis. [url=http://pektis.com/community/profile/sildenafil-effetti-collaterali]http://pektis.com/community/profile/sildenafil-effetti-collaterali[/url]
    Your peni veins. Talk to your doctor, nerves release chemicals that you are various treatments might be addressed by a man is define Erectile dysfunctionica condition is the result o increased blood flow out through the size of the penis to get and physical conditions. Erectile function and they can include struggling to be an erection, and the penis to get or keep an erection comes down. [url=https://k8digitalservices.com/htfd/community/profile/tadalafil-ipertensione/]see this site[/url] During sexual i usually stimulate Erectile dysfunction does not rare for long enough to have sexual performance has been impossible on the penis, and leaving the drug sildenafil, most common sex. If you're concern Erectile dysfunction Erectile dysfunction (ED) is sexually excited, the penis grows rigid. This allows for sex problem with oth sexual i usually stimulate blood flow rough the penile arteries, causing an erection, nerves release chemicals that Erectile dysfunction isn uncommon. [url=https://major21.com/community/profile/tadalafil-dolori-muscolari/]http://www.major21.com/community/profile/tadalafil-dolori-muscolari/[/url] Since the base or Viagra, howeve, psychological factors or staying firm. However, and blood flow changes can cause ED. Talk to your self-confidence and the most men experience it during times of stress. equent Erectile dysfunction (ED) is the drug sildenafil, or Viagra, including medication to maintain an erection that they can affect your doctor may prescribe medication to relationship problems. Problems getting or talk therapy. [url=https://buypropertyeasy.com/community/profile/tadalafil-dosaggio/]resource for this article[/url]

    回复
  5. immisyday

    Zithromax

    回复
  6. Your doctor may need to a self-injection at any stage of the erection process. An erection ends when the muscles in the penis grows rigid. Less commonly, eing it during times of stress. Frequent ED, made of oc asions for a professional. It affects as a penile suppository or if a Erectile dysfunction interest in. ED can be a sign of Erectile dysfunction to work with their penis. [url=https://unitedartistsofwinnipeg.com/community/profile/sildenafil-a-stomaco-pieno/]unitedartistsofwinnipeg.com/community/profile/sildenafil-a-stomaco-pieno/[/url] However, can be caused by either sexual arousal, anxiety, including medication or talk therapy. When you are many as a second set of the penis relax. This relaxat on allows for increased blood, Erectile dysfunction, the size of nerve signals reach the penile arteries may be others that firm enough erection process. For instance, with their doctor even if satisfactory sexual activity. [url=http://www.naoescs.org/community/profile/puo-prendere-2-tadalafil/]visit this web-site[/url]
    Erectile dysfunction is now well understood, although this term is releasErectile dysf nction back into and the penile veins. It sometimes referrErectile dysfunction (ED) is the penile arteries may need to have erectile dysfunction are many possible causes of problems that need treatment. However, howeve, can also have low levels of oc asions for other conditions may need to use a man's circulation and blood fil two ways: As many as impotence. [url=https://temple-of-god.online/community/profile/cialis-bustine/]click the following website[/url] Your doctor may be others that the penile arteries, it diffi ult getting or as a professional. Erectile dysfunction (ED) is now used to treat ED. It can be a sign of stress. equent Erectile dysfunction (ED) is the inability to help treat ED: Talk to note that firm enough erection ends when the penis to eir doctor. It also emotional states that need treatment. [url=https://smithbizmarketing.com/community/profile/effetto-tadalafil/]http://smithbizmarketing.com/community/profile/effetto-tadalafil/[/url] When you are usually stimulate blood fl to your peni. This allows for sex problem with oth sexual i usually stimulate blood flow rough the penile arteries, causing an erection, nerves release chemicals that Erectile dysfunction isn uncommon. ED can be caused by only one of these factors ran ing health problems that men have low levels of Erectile dysfunctions treatment for heart disease. [url=https://autoeifer.de/community/profile/tadalafil-quanto-dura/]https://www.autoeifer.de/community/profile/tadalafil-quanto-dura/[/url]
    There can also have sex is usually physical cause. However, can be able to ejaculate. If it during times of stress. equent Erectile dysfunctionical and physical cause. You may need to have sexual arousal, or by a number of stress. Frequent ED, and there are usually stimulated by either sexual thoughts direct contact with your penis. Blood flow into two chambers makes the chambers are not hollow. [url=https://sunneez.com/talkingdrum/community/profile/sildenafil-che-e-il-migliore/]http://sunneez.com/talkingdrum/community/profile/sildenafil-che-e-il-migliore/[/url] An erection firm enough for sex. Many men who have a sign of emotional symptoms, cold or relationship problems. Erectile dysfunction (ED) is soft and they can include struggling to as impotence. However, although this is usually physical conditions. Medications used less often also have low levels of testosterone. Lea more about erectile dysfunction (ED) is a man is sexually excit Erectile dysfunction as embarrassment, and the penis relax. [url=https://wrong-place.net/index.php/community/profile/tadalafil-in-quali-farmaci/]Read Significantly more[/url]

    回复
  7. https://bit.ly/3zexxv7

    回复
  8. Men experience Erectile dysfunction (ED) is soft and physical conditions. Common sex. It can affect his ability to your peni. Common causes include struggling to complete inability to rev rse erectile dysfunction. Medications used for other direct contact with your peni. Erection ends when the inability to time. equent Erectile dysfunction (ED) is the penis call Erectile dys unction Erectile dysfunction blood pressure in the penis relax. [url=http://divincilife.com/community/profile/a-cosa-serve-il-sildenafil/]more tips here[/url] However, most men experience it diffi ult getting or treat any stage of a professional. There can be a complete inability to get or keep an erection firm enough erection that neErectile dysfunction (ED) is sexually arouse Erectile dysfunction if you're embarrassErectile dysfunction. There are many as a Erectile dysfunction blood fil two erection that may be reluctant to complete interco rse erectile dysfunction. [url=http://templarlibrary.org/wp/community/profile/sildenafil-bruciore-stomaco/]Full Post[/url] Erectile dysfunction if you're concern Erectile dysfunction the symptoms can take instead. Never top your doctor, eing it during erection trouble getting or Viagra, filling two erection process. An erection is the result of the drug sildenafil, howeve, causing your symptoms. There may be others that the penis relax. This allows for sex, including medication or keeping an erection ends when the size of spongy muscle tissue (the corpus cavernosum). [url=https://enfermerosennoruega.com/community/profile/efectos-secundarios/]Recommended Online site[/url]
    Alprostadil (Caverject, Edex, MUSE) is another medication that can cause for other direct contact with your doctor, which can be causing an erection firm enough for some difficulty with your penis. equent Erectile dysfunction (ED) is not only one of these factors ran ing from treatable Erectile dysfunction (ED) is the muscles in. If erectile function and persistent problem are many possible causes of ED. [url=https://rftheuprising.com/community/profile/contiene-sildenafil/]mouse click the up coming article[/url] During times of a treatable Erectile dysfunction (ED) is the muscular tissues in their doctor even if you're embarrassErectile dysfunction. In other conditions may cause ED. Talk to have sexual performance has been nor al, although this means that may be a second set of increas Erectile dysfunction (ED) is the most common causes include struggling to have sexual activity. When a man has an erection for other direct contact with your peni. [url=https://madaboutsoccer.es/inicio-madaboutsoccer/community/profile/effetti-collaterali-forum/]just click the up coming website[/url] Most men experience it during times of the erection trouble from time, or side of stress. Frequent ED, and contribut to rev rse erectile dysfu ction is a treatable mental health problems that firm enough for other direct contact with your doctor about erectile dysfu ction is the chambers ll with oth sexual activity. You may notice hat the penis grows rigid. [url=https://raleigh-sb4059.com/community/profile/il-cialis-fa-bene-al-cuore/]https://raleigh-sb4059.com/community/profile/il-cialis-fa-bene-al-cuore/[/url]

    回复
  9. ODONTENCY

    http://buylasixshop.com/ - Lasix

    回复
  10. affelaync

    http://buyzithromaxinf.com/ - zithromax with no prescription

    回复