2024-08-08

在PHP中,可以使用openssl_encrypt函数来实现DESede/ECB/PKCS5Padding加密。由于PHP的mcrypt_*系列函数已经在PHP 7.2.0中废弃,并且在PHP 7.3.0完全移除,以下是使用openssl_encrypt函数的示例代码:




<?php
function desede_encrypt($data, $key) {
    $cipher = 'des-ede3-ecb'; // DESede/ECB/NoPadding,PHP中没有PKCS5Padding,需要手动填充
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipher));
 
    $encrypted = openssl_encrypt($data, $cipher, $key, OPENSSL_RAW_DATA, $iv);
    // 使用PKCS5Padding填充
    $block_size = openssl_cipher_iv_length($cipher);
    $padded = pkcs5_pad($data, $block_size);
 
    return base64_encode($encrypted);
}
 
function pkcs5_pad($text, $blocksize) {
    $pad = $blocksize - (strlen($text) % $blocksize);
    return $text . str_repeat(chr($pad), $pad);
}
 
$key = 'your-3-key'; // 24字节密钥
$plaintext = 'Your plaintext data';
 
$encrypted = desede_encrypt($plaintext, $key);
echo $encrypted;
?>

请注意,Java中的SHA1PRNG是指使用了SHA1散列算法和Linux的/dev/random或/dev/urandom作为随机数源的加密算法。在PHP中,你可能需要使用random_bytesrandom_int函数来获取随机数,但是PHP默认使用的是libc的随机数生成器,与Java的SHA1PRNG可能有所不同。如果需要确保与Java环境的加密结果一致,可能需要进一步调整或使用与Java环境相同的随机数源。

2024-08-08

要创建一个HTML5的七夕情人节表白页面,我们可以使用一个简单的3D立方体GIF动画作为背景,来提升页面的视觉效果。以下是一个简单的HTML和CSS示例,用于创建带有3D立方体背景的表白页面:




<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>七夕情人节表白页面</title>
<style>
  body, html {
    margin: 0;
    padding: 0;
    height: 100%;
  }
  .container {
    perspective: 1000px;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    text-align: center;
  }
  .cube {
    width: 200px;
    height: 200px;
    transform-style: preserve-3d;
    animation: rotate 5s infinite linear;
  }
  .side {
    width: 200px;
    height: 200px;
    position: absolute;
    background-size: cover;
    box-shadow: 0 0 5px #fff;
  }
  @keyframes rotate {
    0% {
      transform: rotateX(0deg) rotateY(0deg);
    }
    100% {
      transform: rotateX(360deg) rotateY(360deg);
    }
  }
</style>
</head>
<body>
<div class="container">
  <div class="cube">
    <div class="side" style="background-image: url('img1.gif'); transform: translateZ(100px);"></div>
    <div class="side" style="background-image: url('img2.gif'); transform: rotateY(90deg) translateZ(100px);"></div>
    <div class="side" style="background-image: url('img3.gif'); transform: rotateY(-90deg) translateZ(100px);"></div>
    <div class="side" style="background-image: url('img4.gif'); transform: rotateX(90deg) translateZ(100px);"></div>
    <div class="side" style="background-image: url('img5.gif'); transform: rotateX(-90deg) translateZ(100px);"></div>
    <div class="side" style="background-image: url('img6.gif'); transform: rotateY(180deg) translateZ(100px);"></div>
  </div>
</div>
</body>
</html>

在这个示例中,我们创建了一个带有6个面的3D立方体,每个面使用了不同的GIF动图作为背景。通过CSS中的transform-style: preserve-3d;属性,我们可以让立方体内部的元素保持3D效果。动画通过CSS的@keyframes规则创建,使立方体不断旋转。

请替换img1.gifimg6.gif为你自己的图片链接。这个简单的例子可以作为你创建更复杂3D立方体效果的起点。

2024-08-08

以下是一个简化的HTML和JavaScript代码示例,用于创建一个流星落到地面的动画效果。




<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>流星动画</title>
<style>
  canvas {
    background: #000;
    display: block;
  }
</style>
</head>
<body>
 
<canvas id="canvas"></canvas>
 
<script>
  const canvas = document.getElementById('canvas');
  const ctx = canvas.getContext('2d');
  const W = canvas.width = window.innerWidth;
  const H = canvas.height = window.innerHeight;
  const halfW = W * 0.5;
  const halfH = H * 0.5;
 
  class Star {
    constructor() {
      this.x = Math.random() * W;
      this.y = Math.random() * H;
      this.coords = this.calculateCoords(this.x, this.y);
      this.velocity = {
        x: (Math.random() - 0.5) * 5,
        y: (Math.random() - 0.5) * 5
      };
      this.angle = Math.atan2(this.velocity.y, this.velocity.x);
      this.speed = 2;
      this.size = Math.random() * 2;
      this.brightness = Math.random() * 255;
    }
 
    update() {
      this.x += this.velocity.x * this.speed;
      this.y += this.velocity.y * this.speed;
      if(this.x > W || this.x < 0) this.velocity.x *= -1;
      if(this.y > H || this.y < 0) this.velocity.y *= -1;
    }
 
    draw() {
      ctx.beginPath();
      ctx.fillStyle = `hsl(25, 100%, ${this.brightness}%)`;
      ctx.arc(...this.coords, this.size, 0, Math.PI * 2);
      ctx.fill();
    }
 
    calculateCoords(x, y) {
      const angle = Math.atan2(halfH - y, halfW - x);
      const r = Math.hypot(halfW - x, halfH - y);
      return [
        halfW + r * Math.cos(angle),
        halfH + r * Math.sin(angle)
      ];
    }
  }
 
  const starfield = [];
  const starCount = 1000;
  for (let i = 0; i < starCount; i++) {
    starfield.push(new Star());
  }
 
  function animate() {
    ctx.fillStyle = 'rgba(0, 0, 0, 0.2)';
    ctx.fillRect(0, 0, W, H);
    starfield.forEach((star, index) => {
      star.update();
      star.draw();
    });
    requestAnimationFrame(animate);
  }
 
  animate();
</script>
 
</body>
</html>

这段代码创建了一个流星类,其中包含流星的属性,如位置、速度、颜色和大小。calculateCoords函数将2D平面上的坐标转换为3D空间中的坐标。update方法更新流星的位置,如果它超出了屏幕边界,就反弹。draw方法在画布上绘制流星。主循环中创建了一个流星数组,并在animate函数中更新和绘制它们。

2024-08-08

以下是一个简单的HTML和CSS代码示例,用于创建一个表白页面,模仿烟花绽放的视觉效果:




<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>情人节烟花表白</title>
<style>
  body, html {
    height: 100%;
    margin: 0;
    font-family: Arial, sans-serif;
  }
 
  .fireworks {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translateX(-50%) translateY(-50%);
    width: 100px;
    height: 100px;
    background: #f00;
    border-radius: 50%;
    opacity: 0;
    animation: fireworks-animation 2s infinite;
  }
 
  @keyframes fireworks-animation {
    0% {
      opacity: 0;
      transform: translateX(-50%) translateY(-50%) scale(0.5);
    }
    100% {
      opacity: 1;
      transform: translateX(-50%) translateY(-50%) scale(1);
    }
  }
</style>
</head>
<body>
<div class="fireworks"></div>
<script>
  function createFirework() {
    const firework = document.createElement('div');
    firework.classList.add('fireworks');
    document.body.appendChild(firework);
    setTimeout(() => {
      firework.remove();
    }, 2000);
  }
 
  setInterval(createFirework, 1000);
</script>
</body>
</html>

这段代码通过CSS创建了一个简单的火焰图案,通过JavaScript定时创建火焰图案的效果,模拟烟花在空中飘落的视觉效果。这个示例可以作为表白页面的一个简单的视觉娱乐,但是要注意,应该尊重对方的感受,不要给不喜欢这种表白方式的人带来不愉快。

2024-08-08

在JavaScript和jQuery中,选取HTML标签通常使用以下方法:

  1. JavaScript原生方法:

    • document.getElementById('id'):通过元素ID获取一个元素。
    • document.getElementsByClassName('class'):通过元素类名获取元素集合。
    • document.getElementsByTagName('tagname'):通过元素标签名获取元素集合。
    • document.querySelector('#id'):通过CSS选择器获取第一个匹配的元素。
    • document.querySelectorAll('.class'):通过CSS选择器获取所有匹配的元素集合。
  2. jQuery方法:

    • $('#id'):通过ID选取元素。
    • '.class':通过类名选取元素。
    • 'tagname':通过标签名选取元素。
    • $('selector'):通过CSS选择器选取元素。

示例代码:




// JavaScript原生方法
var elementById = document.getElementById('myId');
var elementsByClassName = document.getElementsByClassName('myClass');
var elementsByTagName = document.getElementsByTagName('div');
var firstElementByQuery = document.querySelector('div.myClass');
var allElementsByQuery = document.querySelectorAll('p');
 
// jQuery方法
var jqueryElementById = $('#myId');
var jqueryElementByClass = $('.myClass');
var jqueryElementByTag = $('div');
var jqueryElementBySelector = $('p.myClass');
2024-08-08



// 假设你已经在HTML中有一个id为"myDiv"的元素
 
// 使用jQuery为元素绑定点击事件
$('#myDiv').on('click', function() {
    alert('我被点击了!');
});
 
// 使用jQuery为元素绑定鼠标悬停事件
$('#myDiv').on('mouseenter', function() {
    $(this).css('color', 'red');
});
 
// 使用jQuery为元素绑定鼠标离开事件
$('#myDiv').on('mouseleave', function() {
    $(this).css('color', 'black');
});
 
// 使用jQuery实现淡入淡出动画
$('#myDiv').fadeIn(); // 淡入
$('#myDiv').fadeOut(); // 淡出
 
// 使用jQuery实现滑入滑出动画
$('#myDiv').slideDown(); // 滑下
$('#myDiv').slideUp(); // 滑上
 
// 使用jQuery进行链式调用
$('#myDiv')
    .fadeIn()
    .fadeOut()
    .slideDown()
    .slideUp();

这段代码展示了如何使用jQuery来绑定事件处理器,以及如何应用淡入、淡出和滑入、滑出动画。链式调用允许你在一个元素上连续应用多个操作。

2024-08-08

由于提供的代码已经是一个完整的项目结构,并且涉及到的内容较多,我无法提供一个完整的代码实例。但是,我可以提供一个简化的代码片段作为示例,展示如何在Java中使用JDBC连接MySQL数据库。




import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class DatabaseConnection {
    private Connection connection;
 
    public void connectToDatabase() {
        try {
            // 加载MySQL JDBC驱动程序
            Class.forName("com.mysql.cj.jdbc.Driver");
 
            // 设置数据库连接字符串,用户名和密码
            String connectionString = "jdbc:mysql://localhost:3306/mydatabase?serverTimezone=UTC";
            String username = "root";
            String password = "password";
 
            // 建立连接
            connection = DriverManager.getConnection(connectionString, username, password);
 
            System.out.println("Connected to the database successfully.");
        } catch (ClassNotFoundException e) {
            System.out.println("MySQL JDBC Driver not found.");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("Connection to database failed.");
            e.printStackTrace();
        }
    }
 
    public void closeConnection() {
        try {
            if (connection != null && !connection.isClosed()) {
                connection.close();
                System.out.println("Connection closed successfully.");
            }
        } catch (SQLException e) {
            System.out.println("Unable to close the connection.");
            e.printStackTrace();
        }
    }
}

这个简化的代码片段展示了如何在Java中使用JDBC连接到MySQL数据库。首先,它尝试加载MySQL的JDBC驱动程序。然后,它创建一个数据库连接字符串,并使用DriverManager获取数据库连接。最后,它关闭数据库连接。这个过程是任何数据库交互的基础,并且是任何商业网站后端设计的重要组成部分。

2024-08-08

由于这个查询涉及到的内容较多,我将给出核心的数据库连接和查询代码示例。




// 导入所需的类库
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSet;
 
@Controller
public class PerformanceController {
 
    // 查询员工绩效信息
    @RequestMapping(value = "/getPerformance", method = RequestMethod.GET)
    public @ResponseBody String getPerformance(HttpServletRequest request) {
        String empId = request.getParameter("empId");
        String sql = "SELECT * FROM performance WHERE emp_id = ?";
 
        try (
                Connection conn = getConnection();
                PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
        ) {
            pstmt.setString(1, empId);
            ResultSet rs = pstmt.executeQuery();
 
            List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
            while (rs.next()) {
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("id", rs.getInt("id"));
                map.put("empId", rs.getString("emp_id"));
                map.put("kpi", rs.getString("kpi"));
                map.put("kra", rs.getString("kra"));
                map.put("weight", rs.getInt("weight"));
                map.put("score", rs.getInt("score"));
                list.add(map);
            }
            return JSON.toJSONString(list);
        } catch (Exception e) {
            e.printStackTrace();
            return "{\"error\":\"" + e.getMessage() + "\"}";
        }
    }
 
    // 获取数据库连接
    private Connection getConnection() throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/your_database_name";
        String username = "your_username";
        String password
2024-08-08

流式 HTML 是一种技术,它允许你在不使用 JavaScript 的情况下,异步更新 DOM。这是通过 HTML 中的 async 属性以及一些特殊的自定义元素实现的。

以下是一个简单的例子,展示如何使用流式 HTML 来异步更新 DOM:




<!DOCTYPE html>
<html>
<head>
    <title>Streaming HTML Example</title>
</head>
<body>
    <h1>流式 HTML 更新 DOM 示例</h1>
    <async-content>
        <!-- 在这里插入异步加载的内容 -->
    </async-content>
 
    <script>
        // 自定义元素的构造函数
        class AsyncContent extends HTMLElement {
            constructor() {
                super();
                // 创建一个 Shadow DOM
                const shadow = this.attachShadow({mode: 'open'});
                // 添加一个模板
                const template = document.createElement('template');
                template.innerHTML = `
                    <style>
                        p { color: blue; }
                    </style>
                    <p>加载中...</p>
                `;
                shadow.appendChild(template.content.cloneNode(true));
                
                // 异步获取内容并更新 DOM
                fetch('content.html')
                    .then(response => response.text())
                    .then(htmlContent => {
                        shadow.querySelector('p').innerHTML = htmlContent;
                    })
                    .catch(error => {
                        console.error('Error fetching content:', error);
                        shadow.querySelector('p').textContent = '内容加载失败';
                    });
            }
        }
 
        // 定义自定义元素
        customElements.define('async-content', AsyncContent);
    </script>
</body>
</html>

在这个例子中,我们定义了一个名为 async-content 的自定义元素,并在其构造函数中创建了一个 Shadow DOM。我们还添加了一个模板,其中包含加载时显示的文本。接着,我们使用 fetch API 异步获取外部内容,并在成功获取后更新 Shadow DOM 中的 <p> 元素的内容。如果获取过程中出现错误,我们会在 <p> 元素中显示错误信息。这个例子展示了如何使用流式 HTML 技术和自定义元素来实现 DOM 的异步更新,而无需 JavaScript。

2024-08-08

以下是一个简化的代码示例,展示了如何在树莓派上使用Flask来提供一个基于HTML和JavaScript的用户界面,并与MQTT代理进行通信以使用文心一言进行自然语言处理:




from flask import Flask, render_template, request, jsonify
import paho.mqtt.client as mqtt
import requests
 
app = Flask(__name__)
 
# MQTT 配置
MQTT_BROKER = "your_mqtt_broker_address"
MQTT_PORT = 1883
MQTT_KEEPALIVE_TIME = 60
 
# MQTT 客户端实例
client = mqtt.Client("pi_control_system")
client.connect(MQTT_BROKER, MQTT_PORT, MQTT_KEEPALIVE_TIME)
client.loop_start()
 
# 文心一言API配置
WUJUN_API_URL = "http://your_wujunyiyan_api_address"
 
@app.route("/")
def index():
    return render_template("index.html")
 
@app.route("/ask", methods=["POST"])
def ask():
    question = request.form["question"]
    data = {"text": question}
    response = requests.post(WUJUN_API_URL, json=data)
    return jsonify(response.json)
 
@app.route("/control", methods=["POST"])
def control():
    device = request.form["device"]
    action = request.form["action"]
    client.publish(f"control/{device}", action)
    return jsonify({"status": "success"})
 
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

在这个简化的代码示例中,我们创建了一个Flask应用程序,提供了两个路由:/用于渲染HTML页面,/ask用于向文心一言API发送请求并返回响应。另外,/control路由用于接收前端发送的控制命令,并将这些命令发送到MQTT代理,进而可能被树莓派上的其他智能设备执行。

注意:这个示例假设你已经有了文心一言API的有效地址和MQTT代理的配置信息。此外,对于MQTT客户端的实现和API请求的处理,你可能需要根据你的实际环境进行相应的调整。