module AesCryptHelper

  AES_KEY = EduSetting.get("login_crypt_key") || '59c96c3572ab8cc1'

  def encrypt(plain_text, output_encoding = 'base64')

    # 将字符串密钥和IV转换为16字节的字节数组
    key = AES_KEY.byteslice(0, 16)
    iv = AES_KEY.byteslice(0, 16)

    # 创建并设置AES-CBC加密器
    cipher = OpenSSL::Cipher.new('AES-128-CBC')
    cipher.encrypt
    cipher.key = key
    cipher.iv = iv

    # 加密数据，并添加PKCS7填充
    encrypted_data = cipher.update(plain_text) + cipher.final
    # 将加密数据转换为Base64编码
    Base64.strict_encode64(encrypted_data)
  end
  
  def decrypt(cipher_text, input_encoding = 'base64')
    # 确保密钥是16字节长
    key = AES_KEY.byteslice(0, 16) # 如果密钥不足16字节，填充空格；如果超过，截断
    iv = AES_KEY.byteslice(0, 16)
    
    decipher = OpenSSL::Cipher.new('AES-128-CBC')
    decipher.decrypt
    decipher.key = key
    decipher.iv = iv
    
    # 根据输入编码解码密文
    decrypted_data = case input_encoding
                     when 'base64'
                       Base64.strict_decode64(cipher_text)
                     else
                       cipher_text
                     end
    
    decrypted = decipher.update(decrypted_data) + decipher.final
    decrypted
  end
  
end